有没有可能更新一个SimpleAdapter?我有一组数据和一个页尾,上面写着“查看下一页结果”。当列表项被点击时,我会捕获事件并获取新数据。然后,我希望使用这些新数据替换ListView中的旧数据,但我不知道该怎么做。有什么想法吗?我不想使用ArrayAdapter,因为据我所知,该适配器仅能包含一个字符串,而我需要它来包含多个字符串和整数。
有没有可能更新一个SimpleAdapter?我有一组数据和一个页尾,上面写着“查看下一页结果”。当列表项被点击时,我会捕获事件并获取新数据。然后,我希望使用这些新数据替换ListView中的旧数据,但我不知道该怎么做。有什么想法吗?我不想使用ArrayAdapter,因为据我所知,该适配器仅能包含一个字符串,而我需要它来包含多个字符串和整数。
SimpleAdapter
一个可变映射,然后在需要更新列表时手动调用适配器的notifyDataSetChanged
方法。 但是,我下面的观点仍然有效,即SimpleAdapter的文档指定它仅用于静态数据;将其用于可变数据与其设计相悖,因此,如果您使用此技术,请务必检查是否仍然适用于新的Android版本。
(原始评论如下)
如果您查看SimpleAdapter说明,它表示“一种易于将静态数据映射到在XML文件中定义的视图的适配器。” 我已经强调了这一点--简单地说,SimpleAdapater
不适用于更改的数据;它仅处理静态数据。 如果您不能使用ArrayAdapter,因为您的数据有多个文本位,则必须构建自己的自定义ListAdapter或将数据放在DB中并使用其中之一CursorAdapter。
作为最后的手段,如果您不需要太多的性能,在数据更改时,您可以通过构建一个全新的SimpleAdapter
实例并通过setListAdapter
告诉列表视图使用它来更新由SimpleAdapter
支持的ListView
。
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时,调用此函数。记住,您必须使用新数据更新list变量。
希望这可以帮助你..:)
SimpleAdapter
是用于静态数据的,因此您的性能可能会有所不同。最好的解决方案可能是切换到其他类型的适配器,如 ArrayAdapter
,或在每次更改数据集时创建一个新的 SimpleAdapter
。
我无法让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);