0

我正在使用以下代码填充列表视图

创建方法:

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

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

4

3 回答 3

3

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

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

于 2010-06-25T08:25:25.410 回答
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()每次访问活动或片段时重新填充列表是一组非常昂贵的操作。您最好像上面那样智能地填充列表。

于 2014-08-30T09:38:28.730 回答
0

从列表中删除 final 解决了我的问题。

于 2010-06-25T05:34:54.863 回答