Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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