2 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個贊
做一個像這樣的界面
interface OnUserInformedCallback {
fun positive()
fun negative()
}
并在您的活動中實(shí)現(xiàn)它并將其傳遞給您正在獲取對話框的對話框方法,您將在您的活動中獲得 ok 和 cancle 的回調(diào)。代碼就是這樣
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 中用于默認(rèn)對話框
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貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊
是的,所以如果您沒有使用某些 API 來解析信息,或者正在使用局部變量,我建議您在 onClickListener() 方法中執(zhí)行任何您想執(zhí)行的功能。
問題是您使用的是 CustomDialog,它本身擴(kuò)展了 Dialog 類。但不是使用它,而是創(chuàng)建一個新的警報對話框并構(gòu)建它。您關(guān)閉它,但被關(guān)閉的對話框不是您的自定義對話框類,而是您在構(gòu)造函數(shù)中創(chuàng)建的構(gòu)建器對話框。即使您為此進(jìn)行了修復(fù),也會引入不必要的并發(fā)癥。
我建議您在 onClickListener() 函數(shù)中創(chuàng)建 Intent。這樣做的方法是更改您的構(gòu)造函數(shù)以支持回調(diào)偵聽器。簡而言之,當(dāng)您收聽的對話是另一個對話時,您不能只添加一個 onDismissListener() 。您可以做的是在用戶將對話框作為特殊情況關(guān)閉時傳入您想要執(zhí)行的功能。見下文。
所以,首先,像這樣修改你的構(gòu)造函數(shù):
public CustomDialog(Context context, String title, String message,
DialogInterface.OnClickListener listener) {
super(context);
}
在您的構(gòu)造函數(shù)中粘貼您以前的代碼:
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");
}
您所做的是您過去創(chuàng)建一個新的 onClickListener() 并傳入監(jiān)聽器參數(shù)的地方。
轉(zhuǎn)到您的 MainActivity 或您創(chuàng)建自定義對話框的位置。這樣做:
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();
}
});
當(dāng)您不想傳遞 onClickListener() 時(意思是當(dāng)您不想進(jìn)行finish()該活動時)傳入null。
它會起作用。如果這不是您想要的,請告訴我,我會修復(fù)它。
添加回答
舉報