我正在使用以下代码填充listview
Oncreate方法:
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.more_custom_row_view, new String[] {"title","desc"}, new int[] {R.id.text1,R.id.text2});
populateList();
setListAdapter(adapter);
static final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
private void populateList() {
HashMap<String,String> temp = new HashMap<String,String>();
temp.put("title","Previous Searches");
temp.put("desc", "View your search history");
list.add(temp);
HashMap<String,String> temp1 = new HashMap<String,String>();
temp1.put("title","Settings");
temp1.put("desc", "Update your account settings");
list.add(temp1);
}
当我去另一个活动并回到这个活动时,它会重复列表项 每当有人指导我,我在做什么错误?
答案 0 :(得分:2)
问题是您正在为项目使用静态列表,而不是在onCreate方法中清除或重新实例化它。
只要程序正在运行,列表就会保留在内存中,因为它是静态定义的。如果您要返回活动,则会再次将项目添加到列表中。在再次填写之前,您可以使用clear()从填充列表调用中的列表中删除所有项目。
答案 1 :(得分:2)
这是我自己的代码库中的一个片段。
private void populateWithAppPackages() {
//DON'T continue if the adapter is not empty; prevents duplicates
if(!mAdapter.isEmpty()){
return;
}
/* ... populate the list ... */
}
clear()
列表适配器!! clear()
并重新填充列表是一组非常昂贵的操作。如上所述,您最好智能地填充列表。
答案 2 :(得分:0)
从列表中删除final解决了我的问题。