notifydatasetchanged示例
-
01-10-2019 - |
题
我想在我的 Android Application
这 notifyDataSetChanged()
An的方法 ArrayAdapter
但这对我不起作用。
我发现 作为答案, , 那 notifyDataSetChanged()
应该在主线程中运行,但是没有这样的例子。
有人可以发送示例还是至少一个链接?
解决方案
为 ArrayAdapter
, notifyDataSetChanged
仅当您使用 add()
, insert()
, remove()
, , 和 clear()
在适配器上。
当 ArrayAdapter
是构造的,它具有 List
那是通过的。如果您要通过 List
那是活动的成员,后来更改该活动成员, ArrayAdapter
仍在持有原始 List
. 。适配器不知道您更改了 List
在活动中。
您的选择是:
- 使用
ArrayAdapter
修改基础列表(add()
,insert()
,remove()
,clear()
, , ETC。) - 重新创建
ArrayAdapter
与新的List
数据。 (使用大量资源和垃圾收集。) - 创建自己的班级
BaseAdapter
和ListAdapter
这允许改变基础List
数据结构。 - 使用
notifyDataSetChanged()
每次列表都会更新。要在UI-Thread上称呼它,请使用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().
我遇到了同样的问题,我不想连续使用新实例替换整个阵列。因此,我让适应器的人在其他地方进行繁重的举重。
将其添加到通常(尝试)致电通知的位置
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()
在正确的位置。
所以我的情况如下。
我必须在Action Bar选项卡(片段)中更新ListView,其中内容是完全不同的活动返回的内容。但是,最初,ListView不会反映任何更改。但是,当我单击另一个选项卡并返回所需的选项卡时,将使用其他活动的正确内容更新listView。因此,为了解决这个问题 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
它将直接更新我的listView FragmentTab2
.
希望有人发现这有用!