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();