为什么我的ListView中会出现重复的项目?

时间:2010-06-25 05:26:42

标签: android android-listview

我正在使用以下代码填充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);
}

当我去另一个活动并回到这个活动时,它会重复列表项 每当有人指导我,我在做什么错误?

3 个答案:

答案 0 :(得分:2)

问题是您正在为项目使用静态列表,而不是在onCreate方法中清除或重新实例化它。

只要程序正在运行,列表就会保留在内存中,因为它是静态定义的。如果您要返回活动,则会再次将项目添加到列表中。在再次填写之前,您可以使用clear()从填充列表调用中的列表中删除所有项目。

答案 1 :(得分:2)

简单,在填充之前检查adapter.isEmpty()

这是我自己的代码库中的一个片段。

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解决了我的问题。