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