notifyDataSetChanged示例

我想在我的Android Application中使用ArrayAdapternotifyDataSetChanged()方法,但它不适用于我。

我在这里find答案 , notifyDataSetChanged()应该在主线程中运行,但没有这样的例子。

任何人都可以发送一个例子或至less一个链接?!

对于ArrayAdapter ,只有在适配器上使用add()insert()remove()clear()notifyDataSetChanged才能正常工作。

当构造一个ArrayAdapter ,它将保存传入的List的引用。如果您要传入一个属于Activity成员的List ,并稍后更改该Activity成员,那么ArrayAdapter仍然持有对原始List 。 适配器不知道您更改了活动中的List

您的select是:

  1. 使用ArrayAdapter的函数来修改底层List( add()insert()remove()clear()等)
  2. 用新的List数据重新创buildArrayAdapter 。 (使用大量的资源和垃圾收集。)
  3. 创build自己的派生自BaseAdapterListAdapter ,允许更改基础List数据结构。
  4. 每次更新列表时使用notifyDataSetChanged() 。 要在UI线程上调用它,请使用ActivityrunOnUiThread() 。 然后, notifyDataSetChanged()将工作。

你可以使用runOnUiThread()方法如下。 如果您不使用ListActivity ,只需调整代码以获取对ArrayAdapter的引用即可。

 final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter()); runOnUiThread(new Runnable() { public void run() { adapter.notifyDataSetChanged(); } }); 

我最近写了关于这个主题,虽然这个post很旧,我认为这将有助于一些想要知道如何实施BaseAdapter.notifyDataSetChanged()一步一步正确的方式。

请按照如何在Android或更新的博客BaseAdapter.notifyDataSetChanged()中 正确实现 BaseAdapter.notifyDataSetChanged() 。

我有同样的问题,我不想用一个新的实例连续replace整个ArrayAdapter。 因此,我有AdapterHelper在其他地方做繁重的工作。

添加这个你通常会(尝试)呼叫通知

 new AdapterHelper().update((ArrayAdapter)adapter, new ArrayList<Object>(yourArrayList)); adapter.notifyDataSetChanged(); 

AdapterHelper类

 public class AdapterHelper { @SuppressWarnings({ "rawtypes", "unchecked" }) public void update(ArrayAdapter arrayAdapter, ArrayList<Object> listOfObject){ arrayAdapter.clear(); for (Object object : listOfObject){ arrayAdapter.add(object); } } } 

我知道这是一个迟到的回应,但我正面临类似的问题,我设法解决它在适当的地方使用notifyDataSetChanged()

所以我的情况如下。

我不得不在一个完全不同的活动中返回一个操作栏选项卡(片段)更新列表视图的内容。 然而,最初的列表视图不会反映任何变化。 但是,当我单击另一个选项卡,然后返回到所需的选项卡时,将使用其他活动的正确内容更新列表视图。 所以为了解决这个问题,我使用了必须返回数据的activity的代码中的notifyDataSetChanged()

这是我在活动中使用的代码片段。

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_new_forward: FragmentTab2.mListAdapter.notifyDataSetChanged();//this updates the adapter in my action bar tab Intent ina = new Intent(getApplicationContext(), MainActivity.class); ina.putExtra("stra", values1); startActivity(ina);// This is the code to start the parent activity of my action bar tab(fragment). } } 

这个活动会返回一些数据到FragmentTab2 ,它会直接更新我在FragmentTab2列表视图。

希望有人认为这有用!