Android-обновить данные в AlertDialog?

Итак, если я создам AlertDialog так:

AlertDialog.Builder b = new AlertDialog.Builder();
b.setItems(MyStringArray, MyListener);
b.create().show();

и затем я хочу обновить элементы в списке, т. е. MyStringArray изменился, чтобы иметь больше или меньше элементов. Я не могу найти способ сделать это. До сих пор я пытался получить ListView из AlertDialog, но я не могу получить .setAdapter на работу. Это правильный подход, или есть ли лучший способ сделать это?

2 ответов


Я не пробовал это сам, но из всех других приложений, которые я построил, я уверен, что это решит вашу проблему.

вместо использования setItems, попробуйте использовать setAdapter() метод и пройти в ArrayAdapter, который был инициализирован с данными из своего Array of String. Затем, когда вы знаете, что данные изменились, вы можете использовать getListView() чтобы получить объект просмотра и оттуда позвонить getAdapter() так что теперь вы работаете напрямую с набором данных. Вы можете очистить его, и повторно инициализируйте его, если хотите, или просто добавьте / удалите элементы, как вам нравится. Из объекта адаптера, если вы вызываете notifyDataSetChanged() он должен вызвать повторное рисование с использованием нового набора данных, который вы только что поставили адаптеру.

надеюсь, что это поможет вам. Дай мне знать, если нет.--8-->

DSC


Если вы похожи на меня, и вы хотели бы использовать адаптер по умолчанию, например, для элементов multichoice, то есть также способ.

как и любой другой адаптер, просто обновите объект массива строк, получите адаптер из экземпляра диалогового окна, приведите его к соответствующему адаптеру и аннулируйте его.

AlertDialog.Builder b = new AlertDialog.Builder();
b.setItems(MyStringArray, MyListener);
AlertDialog instance = b.create();
instance.show();

// Later when you need to update
MyStringArray[0] = "puf";
ListView list = instance.getListView();
// Now according to whether you used cursor or array for supplying items to the builder
// you have to cast adapter to either CursorAdapter or ArrayAdapter
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter();
adapter.notifyDataSetChanged();

вы можете узнать больше здесь.