我是android新手。我可以知道如何在对话框中制作列表视图(显示A,B,C),当人们选择项目A(例如项目A包含1,2,3个对象)时,对话框将显示1,2,3 。除了3次调用对话框之外,还有更好的方法吗?
答案 0 :(得分:0)
因为你想保留状态,你应该在A,B,C上创建一个新的对话框,它也有一个列表和类似的UI。理想情况下远离基于列表的对话框,但如果必须,最好两个对话框,因为你可以回击。
https://material.io/guidelines/components/dialogs.html#dialogs-simple-dialogs
答案 1 :(得分:0)
是的,正如L7ColWinters所说,您可以使用两个不同的对话框来显示列表。您也可以使用单个对话框显示,但它会有点复杂。
因此,使用两个对话框,您可以执行以下操作。
首先创建主列表和子列表,
List<String> list = new ArrayList<>();
List<String> a = new ArrayList<>();
List<String> b = new ArrayList<>();
List<List<String>> selectedList = new ArrayList<>();
您必须将除主列表之外的所有列表添加到selectedList中。
selectedList.add(a);
selectedList.add(b);
然后使用您的按钮单击以使用listView显示对话框,如下所示
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.custom_dialog);
ListView listView = dialog.findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
List<String> newList = new ArrayList<>();
newList.addAll(selectedList.get(i));
Dialog dialog1 = new Dialog(MainActivity.this);
dialog1.setContentView(R.layout.custom_dialog);
ListView listView = dialog1.findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, newList);
listView.setAdapter(adapter);
dialog1.show();
}
});
dialog.show();
}
});
所以单击“A”,您将获得一个和“B”的列表,您将在第二个对话框中获得b的列表。
<强> custom_dialog.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView"/>
</RelativeLayout>
您可以为两个适配器使用相同的布局。