2 回答
TA贡献1775条经验 获得超11个赞
做一个像这样的界面
interface OnUserInformedCallback {
fun positive()
fun negative()
}
并在您的活动中实现它并将其传递给您正在获取对话框的对话框方法,您将在您的活动中获得 ok 和 cancle 的回调。代码就是这样
fun alertDialog(
context: Context,
message: String,
positiveText: String,
isUa: Boolean,
callback: OnUserInformedCallback
): Dialog {
val dialog = Dialog(context, android.R.style.Theme_Translucent_NoTitleBar)
dialog.setContentView(R.layout.alert_dialog_layout)
dialog.window?.setGravity(Gravity.CENTER)
dialog.setCancelable(true)
dialog.setCanceledOnTouchOutside(true)
val tvOk: TextView = dialog.findViewById(R.id.visit)
val tvMsg: TextView = dialog.findViewById(R.id.mess)
tvMsg.text = message
tvOk.text = positiveText
dialog.findViewById<TextView>(R.id.cancel).setOnClickListener {
callback.negative()
}
tvOk.setOnClickListener {
callback.positive()
}
dialog.create()
return dialog
}
在 java 中用于默认对话框
private AlertDialog getDialog(Activity context, String message, OnUserInformedCallback callbac) {
return new AlertDialog.Builder(context)
.setTitle(R.string.app_name).setMessage(message)
.setCancelable(true)
.setPositiveButton(android.R.string.yes, (dialog12, which) -> callbac.positive())
.setNegativeButton(android.R.string.yes, (dialog1, which) -> callbac.positive())
.create();
}
TA贡献1786条经验 获得超11个赞
是的,所以如果您没有使用某些 API 来解析信息,或者正在使用局部变量,我建议您在 onClickListener() 方法中执行任何您想执行的功能。
问题是您使用的是 CustomDialog,它本身扩展了 Dialog 类。但不是使用它,而是创建一个新的警报对话框并构建它。您关闭它,但被关闭的对话框不是您的自定义对话框类,而是您在构造函数中创建的构建器对话框。即使您为此进行了修复,也会引入不必要的并发症。
我建议您在 onClickListener() 函数中创建 Intent。这样做的方法是更改您的构造函数以支持回调侦听器。简而言之,当您收听的对话是另一个对话时,您不能只添加一个 onDismissListener() 。您可以做的是在用户将对话框作为特殊情况关闭时传入您想要执行的功能。见下文。
所以,首先,像这样修改你的构造函数:
public CustomDialog(Context context, String title, String message,
DialogInterface.OnClickListener listener) {
super(context);
}
在您的构造函数中粘贴您以前的代码:
TextView textView = new TextView(context);
textView.setGravity(Gravity.CENTER);
textView.setPadding(10, 50, 10, 10);
textView.setText(title);
textView.setTextColor(Color.BLACK);
textView.setTextSize(20);
Typeface boldTypeface = Typeface.defaultFromStyle(Typeface.BOLD);
textView.setTypeface(boldTypeface);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder
.setCustomTitle(textView)
.setMessage(message)
.setPositiveButton("Ok", listener);
AlertDialog customDialog = builder.show();
TextView messageText = customDialog.findViewById(android.R.id.message);
if (messageText != null) {
messageText.setGravity(Gravity.CENTER);
messageText.setTextColor(Color.GRAY);
} else {
Log.w(TAG, "messageText is null");
}
您所做的是您过去创建一个新的 onClickListener() 并传入监听器参数的地方。
转到您的 MainActivity 或您创建自定义对话框的位置。这样做:
CustomDialog customDialog = new CustomDialog(FirstActivity.this, "Title", "Message",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do your functionality here.
Intent intent = new Intent(context, activity.class);
//Add any flags if you want
...
context.startActivity(intent);
//Or you can simply do context.finish();
}
});
当您不想传递 onClickListener() 时(意思是当您不想进行finish()该活动时)传入null。
它会起作用。如果这不是您想要的,请告诉我,我会修复它。
添加回答
举报