Android setOnDismissListener не вызывается внутри onCreateDialog с помощью AlertDialog.Builder? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть кнопка активности, на которой я открываю свой собственный диалог, вызывая этот метод

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 я расширил DialogFragment как

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 продолжает работать как onDismiss или onCancel никогда не вызывается?

Я пытаюсь решить эту проблему уже час. Прочитал много ответов stackoverflow, но, похоже, ни один из них не работает.

Заранее спасибо.

1 Ответ

2 голосов
/ 13 июля 2020

Согласно документации onCreateDialog () :

Примечание: DialogFragment владеет обратными вызовами Dialog.setOnCancelListener и Dialog.setOnDismissListener. Вы не должны устанавливать их самостоятельно. Чтобы узнать об этих событиях, переопределите onCancel (DialogInterface) и onDismiss (DialogInterface) .

Таким образом, вы должны переместить свой лог c в методы onCancel() и onDismiss() на DialogFragment.

...