当前位置: 首页 > 知识库问答 >
问题:

如何在Android警报对话框中显示列表视图?

罗韬
2023-03-14

在Android应用程序中,我想在AlertDialog中显示自定义列表视图。

我该怎么做呢?

共有3个答案

况安然
2023-03-14

您可以使用自定义对话框。

自定义对话框布局。list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ListView
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"/>
</LinearLayout>

在你的活动中

Dialog dialog = new Dialog(Activity.this);
       dialog.setContentView(R.layout.list)

ListView lv = (ListView ) dialog.findViewById(R.id.lv);
dialog.setCancelable(true);
dialog.setTitle("ListView");
dialog.show();

编辑:

使用alertdialog

String names[] ={"A","B","C","D"};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.custom, null);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
ListView lv = (ListView) convertView.findViewById(R.id.lv);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);
lv.setAdapter(adapter);
alertDialog.show();

风俗xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

断裂

阴凯歌
2023-03-14

根据文档,有三种列表可用于警报对话框

  1. 传统单选列表
  2. 持久单选列表(单选按钮)
  3. 持久性多项选择列表(复选框)

我将在下面分别给出一个例子。

制作传统单选列表的方法是使用setItem

Java版本

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
builder.setItems(animals, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case 0: // horse
            case 1: // cow
            case 2: // camel
            case 3: // sheep
            case 4: // goat
        }
    }
});

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

不需要确定按钮,因为一旦用户单击列表项,控件就返回到OnClickListener

科特林版本

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
builder.setItems(animals) { dialog, which ->
    when (which) {
        0 -> { /* horse */ }
        1 -> { /* cow   */ }
        2 -> { /* camel */ }
        3 -> { /* sheep */ }
        4 -> { /* goat  */ }
    }
}

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

单选按钮列表相对于传统列表的优势在于,用户可以看到当前的设置是什么。制作单选按钮列表的方法是使用setSingleChoiceItem。

Java版本

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a radio button list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
int checkedItem = 1; // cow
builder.setSingleChoiceItems(animals, checkedItem, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user checked an item
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

我在这里硬编码了所选的项目,但是您可以在实际项目中使用类成员变量跟踪它。

科特林版本

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a radio button list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItem = 1 // cow
builder.setSingleChoiceItems(animals, checkedItem) { dialog, which ->
    // user checked an item
}


// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

制作复选框列表的方法是使用setMultiChoiceItems

Java版本

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");

// add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // user checked or unchecked a box
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

在这里,我硬编码了列表中已检查的项目。您更可能希望在ArrayList中跟踪它们

科特林版本

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose some animals")

// add a checkbox list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItems = booleanArrayOf(true, false, false, true, false)
builder.setMultiChoiceItems(animals, checkedItems) { dialog, which, isChecked ->
    // user checked or unchecked a box
}

// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

>

  • 对于上面代码中的上下文,不要使用getApplication ationContext(),否则你会得到一个IllegalStateExc0019(请参阅此处了解原因)。相反,获取对活动上下文的引用,例如使用this
  • 您还可以使用setAdaptersetCouror从数据库或其他源填充列表项,或将CourorListAdapter传递到setSingleChoiceItemsetMultiChoiceItem.
  • 如果列表长于屏幕上的长度,则对话框将自动滚动它。不过,如果你有一个很长的列表,我猜你可能应该用回收器视图做一个自定义对话框。
  • 为了测试上面所有的例子,我只是有一个简单的项目,只有一个按钮,点击时显示对话框:

    import android.support.v7.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
        }
    
        public void showAlertDialogButtonClicked(View view) {
    
            // example code to create alert dialog lists goes here
        }
    }
    
    • 带有一个,两个和三个按钮的Android警报对话框在这里输入图像描述
    • 如何实现自定义AlertDialog视图在这里输入图像描述

  • 朱雅惠
    2023-03-14

    使用下面的代码在AlertDialog中显示自定义列表

    AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this);
    builderSingle.setIcon(R.drawable.ic_launcher);
    builderSingle.setTitle("Select One Name:-");
    
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, android.R.layout.select_dialog_singlechoice);
    arrayAdapter.add("Hardik");
    arrayAdapter.add("Archit");
    arrayAdapter.add("Jignesh");
    arrayAdapter.add("Umang");
    arrayAdapter.add("Gatti");
    
    builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    
    builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String strName = arrayAdapter.getItem(which);
                    AlertDialog.Builder builderInner = new AlertDialog.Builder(DialogActivity.this);
                    builderInner.setMessage(strName);
                    builderInner.setTitle("Your Selected Item is");
                    builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,int which) {
                                    dialog.dismiss();
                                }
                            });
                    builderInner.show();
                }
            });
    builderSingle.show();
    
     类似资料:
    • 在我的应用程序中,当我试图显示自定义的框时,它在android手机中运行良好。现在,当我在android选项卡上安装应用程序时,一切都很好,只有自定义框有问题。不显示。所以我想,我应该检查正常对话框,它工作正常。下面是普通对话框和警报对话框的代码。

    • 当我单击登录按钮时,我想显示,并且移动到另一个页面需要时间。我该怎么做?

    • 我在应用程序中使用“Android-Rate”库。当我尝试显示对话框时遇到问题。 当对话框打开时,里面有我放的句子,但我看不到下图中的按钮: 如您所见,文本显示但按钮未显示,就像按钮不可见一样,但如果您单击对话框的白色部分,它将打开App Store页面。 这是我的代码: 我还将此代码放在<code>Strings.xml</code>中: 你能帮我解决这个问题吗?

    • 问题内容: 我需要帮助在游戏场景中呈现警报视图。我目前正在努力做到这一点,例如GameScene.Swift不是标准的ViewController。如果有帮助,我需要这样做,因为我需要用户输入一个值,该值用作游戏中球Sprite Kit节点的坐标。输入只是一个标准整数,因此这不是问题。也欢迎通过警报视图实现此操作的其他任何想法。 那是在GameViewController文件中 谢谢 问题答案:

    • 从2015年的谷歌I/O中,我了解到谷歌play服务中有一个新的对话框,用户不需要退出当前应用程序来打开位置。下面的图片显示了它的样子: 现在我的问题是,我如何在我的项目中实现这一点?我已经找了,但没有找到任何有效的答案,请帮助!

    • 我已经将我的项目迁移到androidX,我想实现一个带有用户积极和消极反馈的报警对话框。 我正在使用以下代码: 但我在运行应用程序时遇到了这个错误: IllegalStateException:您需要在此活动中使用theme.AppCompat主题(或后代)。