2016-03-22 33 views
0

Meine listview ordnungsgemäß laden, aber wenn ich zurück zu meiner MainActivity gehen dann wieder zu ViewAll Aktivität dann wird es falsch laden wie unten. enter image description hereandroid: listview lädt nicht korrekt

Hier ist meine ViewAll-Aktivität, wo ich geladen habe list view.

public class ViewAll extends Activity { 
    private ListView listView; 
    public ArrayList<Model> arrayList; 
    private Database_Handler database_handler; 
    private SQLiteDatabase db; 
    private MyAdapter adapter; 
    private SwipeRefreshLayout swipeContainer; 
    private long i = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_all); 

     listView = (ListView) findViewById(R.id.listView); 
     swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer); 
     addNewData(); 

     database_handler = new Database_Handler(ViewAll.this); 
     db = database_handler.getReadableDatabase(); 
     arrayList = database_handler.getAllContacts(); 
     adapter = new MyAdapter(ViewAll.this, arrayList); 
     listView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 

     swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       try { 
        database_handler = new Database_Handler(ViewAll.this); 
        db = database_handler.getReadableDatabase(); 
        arrayList = database_handler.getAllContacts(); 
        adapter = new MyAdapter(ViewAll.this, arrayList); 
        listView.setAdapter(adapter); 
        adapter.notifyDataSetChanged(); 
        swipeContainer.setRefreshing(false); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
    private void addNewData() { 
     try { 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        String str1 = "List "+i+" ", str2 = "Handler testing"; 

        database_handler = new Database_Handler(ViewAll.this); 
        db = database_handler.getWritableDatabase(); 
        database_handler.addRegister(str1, str2, db); 
        database_handler.close(); 

        handler.postDelayed(this, 60 * 10); 
        i++; 
       } 
      }, 60 * 10); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

und hier ist meine adapter.

public class MyAdapter extends BaseAdapter{ 
    private Context context; 
    private ArrayList<Model> arrayList; 
    private static LayoutInflater inflater; 
    public MyAdapter(ViewAll viewAll, ArrayList<Model> arrayList) { 
     this.context = viewAll; 
     this.arrayList = arrayList; 
    } 
    @Override 
    public int getCount() { 
     return arrayList.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
     return position; 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    public class Holder { 
     TextView tvFirstName,tvLastName; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View myView = null; 
     try { 
      Holder holder; 
      myView = convertView; 
      if (myView == null) { 
       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       myView = inflater.inflate(R.layout.adapter, null); 
       holder = new Holder(); 
       holder.tvFirstName= (TextView) myView.findViewById(R.id.tvFirstName); 
       holder.tvLastName= (TextView) myView.findViewById(R.id.tvLastName); 
       myView.setTag(holder); 
      } 
      else { 
       holder = (Holder) myView.getTag(); 
      } 
      holder.tvFirstName.setText(arrayList.get(position).getF_name()); 
      holder.tvLastName.setText(arrayList.get(position).getL_name()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return myView; 
    } 
} 

tatsächlich Daten in der Datenbank mit Handler-Klasse Ich bin Einfügen und zeige alle Daten in Listview in meiner ViewAll Aktivität und es funktioniert gut, aber wenn ich zu meinem vorherigen MainActivity gehen und wieder zu ViewAll Aktivität gehe dann Listenansicht Last falsch die im Bild wie nach "List 24" Daten falsch eingefügt angezeigt.

+0

Clear ArrayListe vor adnewdata fastion –

+0

Richtig. 'addNewData' wird jedes Mal aufgerufen, wenn die' ViewAll'-Aktivität erstellt wird. Ich würde eher die Datenbankpopulation verschieben, um unabhängig von der Aktivität zu sein (z. B. beim App-Start, an dem Punkt ersetzen Sie die alten Daten anstatt anzuhängen) – Kevin

Antwort

1

Bitte löschen Sie Ihre Arraylist und löschen Sie den Adapter, wenn Sie ihn vom ersten Listeneintrag laden.

Sie können dies löschen durch lstVwList.setAdapter (null);

+0

Ich weiß Ihre Bemühungen zu schätzen, aber bitte als Kommentar und nicht als Antwort , Vielen Dank. –

+0

Vielen Dank Akshay, es funktioniert gut. Ich schätze Ihre Hilfe. –

Verwandte Themen