Можно ли создать расширяемый список AlertDialog? - PullRequest
13 голосов
/ 11 июля 2011

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

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

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

SOLUTION

Это то, чем я закончил на основе решения 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 (), который - как следует из названия - прослушивает дочерние щелчки!

Ответы [ 3 ]

10 голосов
/ 11 июля 2011

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

1 голос
/ 11 июля 2011

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

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

0 голосов
/ 14 марта 2012

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

...