Возможно ли создать расширяемый список AlertDialog?

В моем приложении пользователи могут выбирать статьи для загрузки с использованием разных критериев. Один из них – год и месяц. Для этого мне нужен AlertDialog со списком лет. Если пользователь затем нажимает на год, список будет расширяться и показывать январь, февраль и т. Д.

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

Возможно ли реализовать такой расширяемый список AlertDialog?

РЕШЕНИЕ

Это то, что я получил на основе решения CommonsWare:

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select something"); ExpandableListView myList = new ExpandableListView(this); MyExpandableListAdapter myAdapter = new MyExpandableListAdapter(); myList.setAdapter(myAdapter); builder.setView(myList); AlertDialog dialog = builder.create(); dialog.show(); 

Остается только проблема: как реализовать прослушиватель onClick для AlertDialog? Обычно я делал это в методе setItems (), но не использовал setItems.

Я добавил myList.setOnItemClickListener после myList.setAdapter (), но он игнорируется. Ничего не происходит, когда я нажимаю элемент:

 myList.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int i, long l) { try { Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show(); } catch(Exception e) { System.out.println("something wrong here "); } } }); 

Решение проблемы с щелчком:

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

Вместо этого вы должны реализовать OnChildClickListener (), который – как следует из названия – прослушивает дочерние клики!

Используйте setView() в AlertDialog.Builder , передав в ExpandableListView который вы надуваете или создаете в Java-коде и AlertDialog.Builder адаптер.

Ну, чтобы использовать списки, вы должны расширить соответствующую активность списка, в вашем случае ExpandableListActivity. Вы не сможете найти ExpandableListDialog для расширения.

Я полагаю, вы могли бы реализовать его в действии, вызывающем диалог, и передать список в диалоговом окне в качестве ссылки и вручную добавить его в макет в диалоговом окне. Я не уверен, что это сработает, но его стоит сделать: D

Вы даже можете сделать android:theme="Theme.Dialog" в файле манифеста на этом конкретном мероприятии.