Обновление андроидных массивов ArrayAdapter
У меня есть ArrayAdapter с этой структурой элементов:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >
<TextView
android:id="@+id/itemTextView"
... />
</RelativeLayout>
И добавьте этот адаптер так:
mAdapter = new ArrayAdapter<String>(this, R.layout.item,
R.id.itemTextView, itemsText);
Все в порядке, но я хочу обновить текст в элементах адаптера. Я нашел решение
mAdapter.notifyDataSetChanged();
но не понимаю, как его использовать. Помоги пожалуйста.
обновить мой код:
String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;
OnCreate
mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem,
R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};
по щелчку
mAdapter.notifyDataSetChanged();
//it dont work
Ответы
Ответ 1
Я думаю, что-то вроде этого
public void updatedData(List itemsArrayList) {
mAdapter.clear();
if (itemsArrayList != null){
for (Object object : itemsArrayList) {
mAdapter.insert(object, mAdapter.getCount());
}
}
mAdapter.notifyDataSetChanged();
}
Ответ 2
Ваша проблема - типичная ошибка Java с указателями.
На первом этапе вы создаете массив и передаете этот массив в адаптер.
На втором этапе вы создаете новый массив (так создается новый указатель) с новой информацией, но адаптер все еще указывает на исходный массив.
// init itemsText var and pass to the adapter
String[] itemsText = {"123", "345", "567"};
mAdapter = new ArrayAdapter<String>(..., itemsText);
//ERROR HERE: itemsText variable will point to a new array instance
itemsText = {"789", "910", "1011"};
Итак, вы можете сделать две вещи: одну, обновить содержимое массива, а не создавать новую:
//This will work for your example
items[0]="123";
items[1]="345";
items[2]="567";
... или что бы я сделал, используйте List, что-то вроде:
List<String> items= new ArrayList<String>(3);
boundedDevices.add("123");
boundedDevices.add("456");
boundedDevices.add("789");
И в обновлении:
boundedDevices.set("789");
boundedDevices.set("910");
boundedDevices.set("1011");
Чтобы добавить дополнительную информацию, в реальном приложении, как правило, вы обновляете содержимое адаптера списка с информацией от поставщика услуг или контента, поэтому обычно для обновления элементов вы будете делать что-то вроде:
//clear the actual results
items.clear()
//add the results coming from a service
items.addAll(serviceResults);
С этим вы очистите старые результаты и загрузите новые (подумайте, что новые результаты должны иметь различное количество элементов).
И вне курса после обновления данных вызывается вызов notifyDataSetChanged()
;
Если у вас есть какие-либо сомнения, не стесняйтесь комментировать.
Ответ 3
Предполагая itemTexts как массив String или String ArrayList, где вы добавляете новые элементы в itemsTextat, после этого вы можете позвонить
mAdapter.notifyDataSetChanged();
Если вы не получили ответа, пожалуйста, введите код.