我想显示一个对话框/弹出窗口,向用户显示一条消息“您确定要删除此条目吗?”,其中一个按钮说“删除”。当点击Delete时,它应该删除该条目,否则什么都不删除。
我已经为这些按钮写了一个点击监听器,但我如何调用对话框或弹出窗口及其功能?
我想显示一个对话框/弹出窗口,向用户显示一条消息“您确定要删除此条目吗?”,其中一个按钮说“删除”。当点击Delete时,它应该删除该条目,否则什么都不删除。
我已经为这些按钮写了一个点击监听器,但我如何调用对话框或弹出窗口及其功能?
当前回答
您可以为此使用AlertDialog,并使用它的Builder类构造一个AlertDialog。下面的例子使用默认的构造函数,它只接受Context,因为对话框将从传入的Context继承适当的主题,但是如果你想这样做,还有一个构造函数允许你指定一个特定的主题资源作为第二个参数。
new AlertDialog.Builder(context)
.setTitle("Delete entry")
.setMessage("Are you sure you want to delete this entry?")
// Specifying a listener allows you to take an action before dismissing the dialog.
// The dialog is automatically dismissed when a dialog button is clicked.
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Continue with delete operation
}
})
// A null listener allows the button to dismiss the dialog and take no further action.
.setNegativeButton(android.R.string.no, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
其他回答
只是简单的一个!在你的Java类中创建一个dialog方法,就像这样:
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并创建UI/设计。下面是我为演示目的创建的一个示例:
<?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。你可以定义你自己的。
使用AlertDialog。建造者:
AlertDialog alertDialog = new AlertDialog.Builder(this)
//set icon
.setIcon(android.R.drawable.ic_dialog_alert)
//set title
.setTitle("Are you sure to Exit")
//set message
.setMessage("Exiting will call finish() method")
//set positive button
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//set what would happen when positive button is clicked
finish();
}
})
//set negative button
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//set what should happen when negative button is clicked
Toast.makeText(getApplicationContext(),"Nothing Happened",Toast.LENGTH_LONG).show();
}
})
.show();
您将得到以下输出。
要查看警报对话框教程使用下面的链接。
Android警报对话框教程
我想补充David Hedlund的回答,分享一个比他发布的更有活力的方法,这样当你有消极行为要做的时候,你可以使用它,当你没有的时候,我希望它能有所帮助。
private void showAlertDialog(@NonNull Context context, @NonNull String alertDialogTitle, @NonNull String alertDialogMessage, @NonNull String positiveButtonText, @Nullable String negativeButtonText, @NonNull final int positiveAction, @Nullable final Integer negativeAction, @NonNull boolean hasNegativeAction)
{
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(alertDialogTitle)
.setMessage(alertDialogMessage)
.setPositiveButton(positiveButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (positiveAction)
{
case 1:
//TODO:Do your positive action here
break;
}
}
});
if(hasNegativeAction || negativeAction!=null || negativeButtonText!=null)
{
builder.setNegativeButton(negativeButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (negativeAction)
{
case 1:
//TODO:Do your negative action here
break;
//TODO: add cases when needed
}
}
});
}
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.show();
}
showDialog(MainActivity.this, "title", "message", "OK", "Cancel", {...}, {...});
科特林
fun showDialog(context: Context, title: String, msg: String,
positiveBtnText: String, negativeBtnText: String?,
positiveBtnClickListener: DialogInterface.OnClickListener,
negativeBtnClickListener: DialogInterface.OnClickListener?): AlertDialog {
val builder = AlertDialog.Builder(context)
.setTitle(title)
.setMessage(msg)
.setCancelable(true)
.setPositiveButton(positiveBtnText, positiveBtnClickListener)
if (negativeBtnText != null)
builder.setNegativeButton(negativeBtnText, negativeBtnClickListener)
val alert = builder.create()
alert.show()
return alert
}
Java
public static AlertDialog showDialog(@NonNull Context context, @NonNull String title, @NonNull String msg,
@NonNull String positiveBtnText, @Nullable String negativeBtnText,
@NonNull DialogInterface.OnClickListener positiveBtnClickListener,
@Nullable DialogInterface.OnClickListener negativeBtnClickListener) {
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setTitle(title)
.setMessage(msg)
.setCancelable(true)
.setPositiveButton(positiveBtnText, positiveBtnClickListener);
if (negativeBtnText != null)
builder.setNegativeButton(negativeBtnText, negativeBtnClickListener);
AlertDialog alert = builder.create();
alert.show();
return alert;
}
现在最好使用DialogFragment而不是直接创建AlertDialog。
怎么做?参见:https://stackoverflow.com/a/21032871/1390874 为什么?参见:https://stackoverflow.com/a/13765411/1390874