在我的应用中,用户可以使用不同的标准选择要下载的文章。其中一个是年月。为此,我想要一个带有年份列表的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() - 顾名思义 - 监听子点击次数!
答案 0 :(得分:10)
在setView()
上使用AlertDialog.Builder
,传入您使用Java代码充气或创建的ExpandableListView
并启用适配器。
答案 1 :(得分:1)
好吧,要使用listviews,你需要扩展相应的list-activity,在你的情况下是ExpandableListActivity。您将无法找到要扩展的ExpandableListDialog。
我想您可以在调用对话框的活动中实现它,并将listview作为参考传递给对话框,并手动将其添加到对话框中的布局中。我不确定这是否有效,但值得一试:D
答案 2 :(得分:0)
您甚至可以在该特定活动的清单文件中生成android:theme="Theme.Dialog"
。