当人们选择列表项时,Android会将alertdialog从一个列表创建到另一个列表

时间:2018-03-07 02:33:45

标签: android alertdialog

我是android新手。我可以知道如何在对话框中制作列表视图(显示A,B,C),当人们选择项目A(例如项目A包含1,2,3个对象)时,对话框将显示1,2,3 。除了3次调用对话框之外,还有更好的方法吗?

2 个答案:

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

您可以为两个适配器使用相同的布局。