0

次のコードを使用してリストビューにデータを入力しています

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

別のアクティビティに行ってこのアクティビティに戻ると、誰かが私にどのような間違いをしているのかを案内するたびに、リストアイテムが複製されます。

4

3 に答える 3

3

問題は、アイテムに静的リストを使用していて、onCreateメソッドでそれをクリアまたは再インスタンス化していないことです。

リストは静的に定義されているため、プログラムが実行されている限り、リストはメモリに残ります。アクティビティに戻ると、アイテムが再びリストに追加されます。clear()を使用して、データを再入力する前に、populatelist呼び出しのリストからすべてのアイテムを削除できます。

于 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 に答える