Обновление ListView с помощью ArrayAdapter

Я использую ListView внутри fragment но у меня возникают проблемы с обновлением ListView.

Это код, который я использую для настройки адаптера в моем ListView

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

где getItems() является getter для массива String, именованные элементы:

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

На данный момент все работает хорошо: я могу видеть в моем списке шесть элементов.

Теперь, если я попытаюсь обновить свой массив таким образом:

items[0]="injected item";

и чем я вызываю notifyDataSetChanged() над моим адаптером, все работает finem, потому что элемент в моем списке изменяется правильно, показывая в качестве первого элемента элемент, вводимый String, вместо элемента 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 если мне нужно изменить количество элементов внутри списка?

1 ответ

вы можете использовать ListArray too.adapter получить список или объект массива для отображения его items.you можете установить любой массив или список к нему, и в любое время вам нужно изменить элементы, вы можете изменить его массив, но массив имеют длину константы, если вы хотите изменить количество элементы массива вы должны использовать adapter.add("string");. Вы можете использовать listarray вместо pass array для вашего адаптера, а также изменить или добавить тоже легко. этот код может помочь вам

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);
</string></string>

licensed under cc by-sa 3.0 with attribution.