В моем приложении пользователи могут выбирать статьи для загрузки с использованием разных критериев. Один из них - год и месяц. Для этого мне нужен AlertDialog со списком лет. Если пользователь затем нажимает на год, список будет расширяться и показывать январь, февраль и т.д.
Я знаю, как сделать расширяемое listview с помощью 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(), который - как следует из названия - прослушивает дочерние клики!