2012-01-16 2 views
8

Итак, если я создаю AlertDialog как так:Android - обновить данные в AlertDialog?

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

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

ответ

9

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

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

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

DSC

+0

Я еще немного новичок при работе с этими диалогами. Должен ли я держать DialogInterface.OnClickListener как OnClickListener или использовать View.OnClickListener, как я мог бы с обычным Listview? – Paul

+0

Что-то глупое, чтобы спросить, когда я могу просто попробовать. Похоже, DialogInterface.OnClickListener - это путь. – Paul

1

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

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

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

You can find out more here.

Смежные вопросы