如何在Android中更新SimpleAdapter

时间:2010-07-22 20:52:21

标签: android listview listadapter

是否可以更新SimpleAdapter?我有一个数据列表和一个显示“查看下一个结果”的页脚当单击该列表项时,我捕获事件并获取新数据。然后我想用这个新数据替换ListView中的数据,但我无法弄清楚如何做到这一点。有任何想法吗?我不想使用ArrayAdapter,因为据我所知,这些项只能容纳一个字符串,我需要它来保存多个字符串和整数。

5 个答案:

答案 0 :(得分:11)

更新:根据del116,您确实可以为SimpleAdapter提供一个可变映射,然后在需要更新列表时手动调用适配器的notifyDataSetChanged方法。但是,我的观点是关于SimpleAdapter的文档,指出它是针对静态数据的;将它用于可变数据与其设计背道而驰,因此如果您使用这种技术,我一定会检查它是否会在新的Android版本中继续发挥作用。

(原始评论如下:)

如果你看一下SimpleAdapter description,它说它是“将静态数据映射到XML文件中定义的视图的简单适配器。”我已经添加了重点 - 简而言之,SimpleAdapater并非构建用于更改的数据;它只处理静态数据。如果您无法使用ArrayAdapter,因为您的数据包含多个文本,那么您将需要构建自己的自定义ListAdapter,或者将数据放入数据库并使用一个CursorAdapter s。

作为最后的手段,如果您不需要太多性能,可以通过构建全新的{{1}来更新由ListView支持的SimpleAdapter }实例,只要您的数据发生变化,并通过SimpleAdapter告诉列表视图使用它。

答案 1 :(得分:3)

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 变量..

希望这有助于......:)

答案 2 :(得分:2)

SimpleAdapter适用于静态数据,因此您的效果可能会有所不同。最好的解决方案可能是切换到不同类型的适配器,例如ArrayAdapter,或者每次更改数据集时都创建一个新的SimpleAdapter

答案 3 :(得分:0)

我无法使用notifyDataSetChanged()来更新我的SimpleAdapter,所以我尝试首先删除所有使用removeAllViews()附加到父布局的视图,然后添加ListView,这样才有效,允许我更新用户界面:

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);

答案 4 :(得分:-3)

mySimpleAdapter.notifyDataSetChanged();

在更新数据HashMap列表

中的数据后使用此行