2016-03-22 8 views
0

私のリストビューは正しく読み込まれますが、MainActivityに戻ってからもう一度ViewAllアクティビティに移動すると、以下のように間違って読み込まれます。 enter image description hereアンドロイド:リストビューの読み込みが正しくない

ここには、私がロードしたViewAllのアクティビティ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(); 
     } 
    } 
} 

ここに私の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; 
    } 
} 

実際に私は、ハンドラクラスを使用してデータベースにデータを挿入して、私のViewAll活動にリストビューにすべてのデータを表示し、それが正常に動作しますが、私は私の前MainActivityに移動し、再びViewAll活動に行くとしていますそして、リストビュー負荷が誤っています"List 24"データが正しく挿入されていない場合のように画像に表示されます。

+0

addnewdata funstionの前にarrayListをクリアしてください。 –

+0

修正してください。 'addNewData'は' ViewAll'アクティビティが作成されるたびに呼び出されます。私はむしろ、データベースの人口をアクティビティから独立させるようにしたいと考えています(例えば、アプリケーションの起動時に、追加する代わりに古いデータを置き換える) – Kevin

答えて

1

あなたのArraylistをクリアして、リストビューの最初のアイテムから読み込んだときにアダプタをクリアしてください。

これは、lstVwList.setAdapter(null)でクリアできます。

+0

私はあなたの努力に感謝しますが、 、ありがとう。 –

+0

ありがとうAkshayそれは正常に動作しています。私はあなたの助けに感謝します。 –

関連する問題