是否可以创建可扩展的列表AlertDialog?

时间:2011-07-10 20:57:52

标签: android alertdialog

在我的应用中,用户可以使用不同的标准选择要下载的文章。其中一个是年月。为此,我想要一个带有年份列表的AlertDialog。如果用户点击一年,该列表将展开并显示1月,2月等。

我知道如何使用SimpleExpandableListAdapter制作可扩展的 listview ,但这不是我想要的。由于其他标准(例如,类别)也列出了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();

仅剩下问题:如何为AlertDialog实现onClick侦听器?通常我会在setItems()方法中执行此操作,但不使用setItems。

我在myList.setAdapter()之后添加了myList.setOnItemClickListener但忽略了它。单击某个项目时没有任何反应:

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 个答案:

答案 0 :(得分:10)

setView()上使用AlertDialog.Builder,传入您使用Java代码充气或创建的ExpandableListView并启用适配器。

答案 1 :(得分:1)

好吧,要使用listviews,你需要扩展相应的list-activity,在你的情况下是ExpandableListActivity。您将无法找到要扩展的ExpandableListDialog。

我想您可以在调用对话框的活动中实现它,并将listview作为参考传递给对话框,并手动将其添加到对话框中的布局中。我不确定这是否有效,但值得一试:D

答案 2 :(得分:0)

您甚至可以在该特定活动的清单文件中生成android:theme="Theme.Dialog"