我正在尝试在我Android Application
的notifyDataSetChanged()
方法中使用,ArrayAdapter
但它对我不起作用。
我在这里找到了答案,它notifyDataSetChanged()
应该在主线程中运行,但是没有示例。
任何人都可以发送一个示例或至少一个链接吗?!
我正在尝试在我Android Application
的notifyDataSetChanged()
方法中使用,ArrayAdapter
但它对我不起作用。
我在这里找到了答案,它notifyDataSetChanged()
应该在主线程中运行,但是没有示例。
任何人都可以发送一个示例或至少一个链接吗?!
对于ArrayAdapter
,notifyDataSetChanged
仅当您在适配器上 使用add()
、insert()
、remove()
和时才有效。clear()
构造an 时ArrayAdapter
,它保存List
传入的 的引用。如果您要传入List
作为 Activity 成员的 a ,并稍后更改该 Activity 成员,ArrayAdapter
则 仍然持有对原始 . 的引用List
。Adapter 不知道你List
在 Activity 中改变了。
您的选择是:
ArrayAdapter
修改底层列表(add()
、insert()
、remove()
、clear()
等)ArrayAdapter
使用新List
数据重新创建。(使用大量资源和垃圾收集。)BaseAdapter
并ListAdapter
允许更改基础List
数据结构。notifyDataSetChanged()
每次更新列表时使用。要在 UI 线程上调用它,请使用runOnUiThread()
. Activity
然后,notifyDataSetChanged()
将工作。您可以使用以下runOnUiThread()
方法。如果您不使用ListActivity
,只需修改代码以获取对您的ArrayAdapter
.
final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
BaseAdapter.notifyDataSetChanged()
我最近写了关于这个主题的文章,虽然这篇文章很旧,但我认为这对想知道如何一步一步以正确方式实施的人会有所帮助。
请关注如何在 Android 中正确实现 BaseAdapter.notifyDataSetChanged()或更新的博客 BaseAdapter.notifyDataSetChanged()。
我遇到了同样的问题,我不想连续用新实例替换整个 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()
在正确的地方使用来解决它。
所以我的情况如下。
我必须使用从完全不同的活动返回的内容更新操作栏选项卡(片段)中的列表视图。然而,最初,列表视图不会反映任何更改。但是,当我单击另一个选项卡然后返回到所需的选项卡时,列表视图将使用来自其他活动的正确内容进行更新。所以为了解决这个问题,我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
。
希望有人觉得这很有用!