Как отобразить диалоговое окно предупреждения на Android?

Я хочу отобразить диалоговое окно / всплывающее окно с сообщением пользователю, которое показывает «Вы уверены, что хотите удалить эту запись?» одним нажатием кнопки «Удалить». Когда Deleteон тронут, он должен удалить эту запись, иначе ничего.

Я написал для этих кнопок прослушиватель кликов, но как мне вызвать диалог или всплывающее окно и его функциональность?

android,android-dialog,

855

Ответов: 22


1578

Для этого можно использовать построитель предупреждений:

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }
    builder.setTitle("Delete entry")
    .setMessage("Are you sure you want to delete this entry?")
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // continue with delete
        }
     })
    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // do nothing
        }
     })
    .setIcon(android.R.drawable.ic_dialog_alert)
    .show();

300 ов

Попробуйте этот код:

AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
builder1.setMessage("Write your message here.");
builder1.setCancelable(true);

builder1.setPositiveButton(
    "Yes",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });

builder1.setNegativeButton(
    "No",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });

AlertDialog alert11 = builder1.create();
alert11.show();

79 ов

Код, который опубликовал Дэвид Хедлунд, дал мне ошибку:

Не удалось добавить окно - токен null недействителен

Если вы получаете ту же ошибку, используйте приведенный ниже код. Оно работает!!

runOnUiThread(new Runnable() {
    @Override
    public void run() {

        if (!isFinishing()){
            new AlertDialog.Builder(YourActivity.this)
              .setTitle("Your Alert")
              .setMessage("Your Message")
              .setCancelable(false)
              .setPositiveButton("ok", new OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                      // Whatever...
                  }
              }).show();
        }
    }
});

58

Просто простой! Создайте метод диалога, что-то вроде этого в любом месте вашего класса Java:

public void openDialog() {
    final Dialog dialog = new Dialog(context); // Context, this, etc.
    dialog.setContentView(R.layout.dialog_demo);
    dialog.setTitle(R.string.dialog_title);
    dialog.show();
}

Теперь создайте XML-макет dialog_demo.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">

    <TextView
        android:id="@+id/dialog_info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/dialog_text"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_below="@id/dialog_info">

        <Button
            android:id="@+id/dialog_cancel"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:background="@color/dialog_cancel_bgcolor"
            android:text="Cancel"/>

        <Button
            android:id="@+id/dialog_ok"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:background="@color/dialog_ok_bgcolor"
            android:text="Agree"/>
    </LinearLayout>
</RelativeLayout>

Теперь вы можете звонить openDialog()из любого места, где вам нравится :) Вот скриншот выше кода.

Введите описание изображения здесь

Обратите внимание, что текст и цвет используются из strings.xmlи colors.xml. Вы можете определить свой собственный.


46

В настоящее время лучше использовать DialogFragment вместо прямого создания AlertDialog.

андроид, андроид-диалог,
Похожие вопросы