0

ListView内部で aを使用していますfragmentが、ListView の更新に問題があります。

これは、私のアダプターを設定するために使用するコードですListView

    adapter = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1,
            ((TabNavigation)this.getActivity()).getItems());
    setListAdapter(adapter);

ここgetItems()で、名前付きアイテムの文字列配列のゲッターです:

items= new String[]{"item 1", "item 2", "item 3", "item 4", "item 5", "item 6"};

この時点で、すべて正常に動作しています。リストに 6 つの項目が表示されています。

さて、この方法でアレイを更新しようとすると:

items[0]="injected item";

notifyDataSetChanged()リスト内のアイテムが正しく変更され、最初の要素としてアイテム1の代わりに文字列が挿入されたアイテムが表示されるため、アダプターを呼び出すよりもすべて正常に動作します。ただし、その命令の代わりに次を使用する場合:

items= new String[]{"injected item", "item 2", "item 3", "item 4", "item 5", "item 6"};

アダプターを介して呼び出すよりもnotifyDataSetChanged()、リストは更新されません。

これは参考値の経過によると思います。初めてアダプターを設定したときに渡された配列のコピーをアダプターが参照し続けているようです。実際、私が使用する場合:

temp= new String[]{"injected item", "item 2", "item 3", "item 4", "item 5", "item 6"};      
System.arraycopy(temp, 0, items, 0, temp.length);

listView は正しく更新されます。ただし、元の配列とまったく同じ長さを使用する必要があります。

したがって、実際の質問は次ListViewのとおりです。リスト内のアイテムの数を変更する必要がある場合、どうすれば更新できますか?

4

1 に答える 1

1

ListArrayも使用できます.adapterは、その項目を表示するためのリストまたは配列オブジェクトを取得します.任意の配列またはリストをそれに設定でき、項目を変更する必要があるときはいつでも配列を変更できますが、配列の数を変更したい場合は、配列の長さが一定です使用する必要がある配列の項目adapter.add("string");。アダプターに配列を渡す代わりに listarray を使用することもでき、変更や追加も簡単です。このコードはあなたを助けるかもしれません

final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < values.length; ++i) {
    list.add(values[i]);
}
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);
于 2013-10-16T15:00:09.463 に答える