Tim*_*ima 160 android android-arrayadapter notifydatasetchanged
我正在尝试使用我Android Application
的notifyDataSetChanged()
方法,ArrayAdapter
但它对我不起作用.
我在这里找到答案,notifyDataSetChanged()
应该在主线程中运行,但是没有例子.
任何人都可以发送一个例子或至少一个链接?!
jno*_*sek 321
对于ArrayAdapter
,notifyDataSetChanged
只有当你使用的作品add()
,insert()
,remove()
,和clear()
在适配器.
当ArrayAdapter
构造一个时,它保存List
传入的引用.如果你传入一个List
属于Activity的成员,并在稍后更改该Activity成员,ArrayAdapter
则仍然保持对原始的引用List
.适配器不知道您List
在活动中更改了.
你的选择是:
ArrayAdapter
修改底层列表(add()
,insert()
,remove()
,clear()
,等等)ArrayAdapter
使用新List
数据重新创建.(使用大量资源和垃圾收集.)BaseAdapter
和ListAdapter
允许潜在的变化List
数据结构.notifyDataSetChanged()
每次更新列表时使用.要调用它的UI线程,使用runOnUiThread()
的Activity
.然后,notifyDataSetChanged()
会工作.Bri*_*ian 32
您可以使用以下runOnUiThread()
方法.如果你没有使用a ListActivity
,只需调整代码以获得对你的引用ArrayAdapter
.
final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
Ari*_*eem 11
我最近写过这个主题,虽然这篇文章很老,但我认为对于想要知道如何BaseAdapter.notifyDataSetChanged()
一步一步地以正确方式实施的人会有所帮助.
请按照如何在Android中正确实现BaseAdapter.notifyDataSetChanged()或更新的博客BaseAdapter.notifyDataSetChanged().
我遇到了同样的问题,我不想连续用新的实例替换整个ArrayAdapter.因此,我让AdapterHelper在其他地方进行繁重的工作.
将此添加到您通常(尝试)调用notify的位置
new AdapterHelper().update((ArrayAdapter)adapter, new ArrayList<Object>(yourArrayList));
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
AdapterHelper类
public class AdapterHelper {
@SuppressWarnings({ "rawtypes", "unchecked" })
public void update(ArrayAdapter arrayAdapter, ArrayList<Object> listOfObject){
arrayAdapter.clear();
for (Object object : listOfObject){
arrayAdapter.add(object);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
289462 次 |
最近记录: |