我正在尝试在我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。
希望有人觉得这很有用!