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 次 |
| 最近记录: |