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

mar*_*lar 13 android android-alertdialog

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

我知道如何使用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();
Run Code Online (Sandbox Code Playgroud)

仅剩下问题:如何为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    ");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

点击问题的解决方案:

解决方案非常简单.由于它是可扩展列表,因此列表本身会捕获项目单击以打开子元素.因此,永远不会调用事件处理程序.

相反,你必须实现OnChildClickListener() - 顾名思义 - 监听子点击!

Com*_*are 10

使用setView()AlertDialog.Builder,通过在ExpandableListView你充气或在Java代码中创建并已设置你的适配器上.

  • 诀窍就是实现OnChildClickListener()而不是OnItemClickListener()! (2认同)