是否可以更新SimpleAdapter?我有一个数据列表和一个页脚,上面写着“查看下一个结果”当单击该列表项时,我捕获该事件并获取新数据。然后我想用这个新数据替换ListView中的数据,但我无法弄清楚如何去做。有任何想法吗?我不想使用ArrayAdapter,因为据我所见,项目只能容纳一个字符串,我需要它来容纳多个字符串和整数。如何在Android中更新SimpleAdapter
回答
更新:根据del116,你确实可以给SimpleAdapter
一个可变的地图,然后手动调用适配器的notifyDataSetChanged
方法,当你需要的名单进行更新。但是,我的观点是关于SimpleAdapter的文档,指定它是用于静态数据;将其用于可变数据与其设计相反,所以如果您使用这种技术,我将确保在出现新的Android版本时继续使用它。
(原文评论如下:)
如果你看看SimpleAdapter description它说,这是“一个简单的适配器映射静态数据在一个XML文件中定义的看法。”我已经添加了重点 - 简单地说,SimpleAdapater
不是为了与更改的数据一起使用而构建的;它只处理静态数据。如果因为您的数据不止一位文本而无法使用ArrayAdapter,那么您将必须构建自己的自定义ListAdapter,或将数据放入数据库并使用其中一个CursorAdapter s。
作为最后的手段,如果你并不需要太多的表现,你可以通过建立一个全新的SimpleAdapter
实例的任何时候你的数据的变化,并告诉通过使用它的列表视图更新由SimpleAdapter
支持的ListView
setListAdapter
。
SimpleAdapter
是用于静态数据,因此您的性能可能会有所不同。最好的解决方案可能是切换到不同类型的适配器,例如ArrayAdapter
,或者每次更改数据集时都创建一个新的SimpleAdapter
。
ListView lv= (ListView) findViewById(R.id.loglist);
ArrayList<Map<String, String>> list = buildData();
String[] from = { "time", "message" };
int[] to = { R.id.logtime, R.id.logmessage };
adapter = new SimpleAdapter(getApplicationContext(), list,R.layout.log_list_row, from,to);
lv.setAdapter(adapter);
每次调用此函数来更新ListView。请记住,你必须用新数据更新的列表变量..
希望这有助于.. :)
我是不是能够得到notifyDataSetChanged()上更新我的SimpleAdapter工作,所以相反,我第一次尝试去除附着于使用removeAllViews(),然后加入ListView的父布局,所有的意见,而工作,让我更新UI:
LinearLayout results = (LinearLayout)findViewById(R.id.results);
ListView lv = new ListView(this);
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.directory_row,
new String[] { "name", "dept" }, new int[] { R.id.name, R.id.dept });
for (...) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("dept", dept);
list.add(map);
}
lv.setAdapter(adapter);
results.removeAllViews();
results.addView(lv);
mySimpleAdapter.notifyDataSetChanged();
使用该行更新后数据中的数据HashMap地图列表
请阅读文档,如上所述SimpleAdapter上不可行SimpleAdapter不适用于此类操作。 – Manny265 2016-07-05 19:09:44
- 1. Android SimpleAdapter刷新
- 2. 如何在Android中使SimpleAdapter成为Singleton?
- 3. 如何在simpleadapter中实现OnItemClickListener?代码删除,更新等,
- 4. 更新SimpleAdapter数据后刷新ListActivity
- 5. android,asyntaskloader,simpleadapter
- 6. Android定制SimpleAdapter
- 7. android-SimpleAdapter + SectionIndexer
- 8. 的Android SimpleAdapter - 要求更改<Map>
- 9. Android SimpleAdapter更改元素样式
- 10. 如何使用simpleadapter填充navigationDrawer android?
- 11. Android:如何在自定义SimpleAdapter中删除项目时刷新列表
- 12. 在Android中更改没有SimpleAdapter的ListView的字体表面
- 13. 如何摆脱SimpleAdapter
- 14. 如何在SimpleAdapter中使用URL图像?
- 15. 如何在SimpleAdapter中使用setViewImage?
- 16. 在SimpleAdapter中的WebView
- 17. 如何在sqlite中更新表格android
- 18. 如何在Android中更新UI
- 19. 如何在android中更新listView?
- 20. 如何在android中更新recyclerview?
- 21. 如何在Android中重置/更新DHCP?
- 22. 如何在Android中更新dbFlow?
- 23. 如何在Android中更新SharedPrefManager
- 24. 如何在Linux中更新Android Studio
- 25. 如何在Android中更新模型值
- 26. Android:关于ListView和SimpleAdapter
- 27. 如何在android中更新值更新的特定行
- 28. 无法刷新ListView与SimpleAdapter
- 29. 在哪里用SimpleAdapter更新数据对象
- 30. 使用SimpleAdapter的ListView没有用新数据更新
这里的答案真的很具误导性。更新数组数据并在我的SimpleAdapter上调用notifyDataSetChanged()之后,我能够更新simpleAdapter。不需要使用ArrayAdapter来调用notifyDataSetChanged()。 – dell116 2011-03-16 19:19:54
@ dell116够公平的。我在回答结束时提到了这种可能性,但根据您的反馈,我已将其提升到最高水平,事实上它确实有效;我没有测试过它。我仍然认为做这样的事情值得注意,因为SimpleAdapter文档明确指出它是用于静态数据的。 – 2011-03-19 09:19:38
现在回头看...哇。我对编程或SimpleAdapter的预期目的一无所知。如果您使用的ListView(或任何AdapterView)支持的数据结构将更改不使用SimpleAdapter。 Foot.inMouth(真); – dell116 2018-01-17 23:28:24