13

私はこの問題を抱えています、私は持っています

private ArrayList<CustomItem> items; 
private ArrayAdapter<CustomItem> arrayAdapter;

アイテムに存在するデータを表示します。このデータはリストビューに表示され、データを更新してこの新しいデータを表示したい

if (!items.isEmpty()) {
    items.clear(); // i clear all data
    arrayAdapter.notifyDataSetChanged(); // first change
    items = getNewData();// insert new data and work well
    arrayAdapter.notifyDataSetChanged();  // second change                                      
}

最初の変更ではデータがクリーンアップされていることがわかりますが、2 番目の変更ではリストビューに新しいデータが表示されず、確認すると項目が空になりません

エラーがどこにあるのかわかりません、助けてもらえますか?よろしくアントニオ

4

3 に答える 3

18

これは、アダプターを新しいデータで更新する方法です。

            if (arrayAdapter == null) {
                arrayAdapter = new CustomArrayAdapter(getActivity(), data);
                listview.setAdapter(userAutoCompleteAdapter);
            } else {
                arrayAdapter.clear();
                arrayAdapter.addAll(newData);
                arrayAdapter.notifyDataSetChanged();
            }
于 2015-11-24T09:37:11.760 に答える
12

getNewData()関数がを返すと仮定して、次ArrayList<CustomItem>の行を変更できますか?

items=getNewData();

items.addAll(getNewData());

それが機能するかどうかを確認しますか?

于 2012-07-25T21:19:07.793 に答える
0

ArrayListクラスで作成したはActivity参照変数であり、 (オブジェクトを初期化するときに) コンストラクターを通過することにより、クラスArrayList内のへの同じ参照を保持しています。AdapterAdapter

ただし、 を実行すると、クラス内のitems = getNewData()への新しい参照が割り当てitemsられます。Activityクラス内の参照Adapterは同じままであるため、画面に変化は見られません。


こんな感じです:

personA: Activityクラスの ArrayList オブジェクト

personB: Adapterクラスの ArrayList オブジェクト

PersonA と personB はどちらも (別々に) アメリカの地図を持っており、画面には personB の地図が表示されています。次に、誰かが personA の地図を別の国の地図に置き換えます。画面にはまだアメリカの地図が表示されています。


の参照を変更する代わりに、、、またはを使用itemsして のデータを変更し、を呼び出す必要があります。add()remove()clear()addAll()itemsnotifyDataSetChanged()

于 2019-08-13T20:30:02.877 に答える