第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為類外的自定義對話框設(shè)置onDismiss/CancelListener?

如何為類外的自定義對話框設(shè)置onDismiss/CancelListener?

紫衣仙女 2023-04-26 13:47:13
我想在取消或取消自定義對話框時完成活動。但是當(dāng)我在其他類中使用 .setOnDismissListener 時,它永遠(yuǎn)不會在內(nèi)部達(dá)到。我發(fā)現(xiàn)了幾個問題,但解決方案是在 customDialog 類中覆蓋 onDismiss 方法。但是我不需要為我創(chuàng)建的每個 customDialog 覆蓋 onDismiss 方法。我應(yīng)該怎么辦?這是我在另一個類中調(diào)用的代碼,但從未在日志“setOnDismissListener”中收到消息。customDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {    @Override    public void onDismiss(DialogInterface dialog) {                                                               Log.d(TAG, "setOnDismissListener");    }});我的 CustomDialog 類:public class CustomDialog extends Dialog {    private static final String TAG = "CustomDialog";    public CustomDialog(Context context, String title, String message) {        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",                        new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                dialog.dismiss();                            }                        });        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");        }    }}
查看完整描述

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();

}


查看完整回答
反對 回復(fù) 2023-04-26
?
Qyouu

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ù)它。


查看完整回答
反對 回復(fù) 2023-04-26
  • 2 回答
  • 0 關(guān)注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號