【问题标题】:Android setOnDismissListener not getting called inside onCreateDialog with AlertDialog.Builder?Android setOnDismissListener 没有在 onCreateDialog 中被 AlertDialog.Builder 调用?
【发布时间】:2020-07-14 02:12:00
【问题描述】:

通过调用此方法,我在打开自定义对话框的活动上有一个按钮

public void openHcoDialog(View v) {
        HcoDialog hcoDiag = new HcoDialog();
        // Supply cityCode input as an argument.
        Bundle args = new Bundle();
        args.putString("cityCode", cityCode);
        hcoDiag.setArguments(args);
        hcoDiag.show(getSupportFragmentManager(), "hco dialog");
    }

在这个 HcoDialog 类中,我扩展了 extends DialogFragment as

public class HcoDialog extends DialogFragment {

@NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.hco_dialog, null);
        builder.setView(view);
        builder.setCancelable(true);

        builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                Toast.makeText(getActivity(), "Toast 1", Toast.LENGTH_LONG).show();
                progressDialog.dismiss();
            }
        });

        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                Toast.makeText(getActivity(), "Toast 2", Toast.LENGTH_LONG).show();
                progressDialog.dismiss();
            }
        });

}

所以当我关闭对话框时,通过单击外部或按下后退按钮,对话框关闭但 progressDialog 继续运行为 onDismissonCancel 是从来没有打过电话?

我试图解决这个问题已经有好几个小时了。已经阅读了许多 stackoverflow 的答案,但似乎都没有。

提前致谢。

【问题讨论】:

    标签: android android-dialogfragment android-dialog


    【解决方案1】:

    根据onCreateDialog() documentation

    注意:DialogFragment 拥有 Dialog.setOnCancelListenerDialog.setOnDismissListener 回调。 您不能自己设置它们。要了解这些事件,请覆盖 onCancel(DialogInterface)onDismiss(DialogInterface)

    因此,您必须将您的逻辑移至DialogFragment 上的onCancel()onDismiss() 方法。

    【讨论】:

    • 如果它“拥有”它的回调,为什么它们会暴露给构建器......根本没有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多