Пользовательский AlertDialog иногда не отображается на интерфейсе пользователя, почему? - PullRequest
1 голос
/ 18 февраля 2020

Я показываю свой собственный AlertDialog. Он работает и показывает нормально в большинстве случаев, но когда я звоню из следующего действия, он не отображается в пользовательском интерфейсе. Код выполняется полностью без исключений, я даже проверил свои журналы и с точками останова, не нашел никаких проблем. Но диалог не появляется в интерфейсе пользователя. Может кто-нибудь сказать мне, в чем может быть проблема?

Это метод в моей деятельности, который вызывает диалоговое окно.

private void showCustomDialog(final int messageType,
                                  final String titleString,
                                  final String msgString,
                                  final String specificMsgString,
                                  final int positiveButtonString,
                                  final int negativeButtonString,
                                  final Runnable positiveButtonClickHandler,
                                  final Runnable negativeButtonClickHandler) {
        if (mDialog != null && mDialog.isShowing()) {
            Log.d(TAG, "showCustomDialog: cannot display two dialogs at once.");
            return;
        }
        runOnUiThread(() -> mDialog = DialogUtil.showDialog(this, mAlertDialogBuilder, 0, messageType, titleString, msgString,
                specificMsgString, positiveButtonString, negativeButtonString, positiveButtonClickHandler, negativeButtonClickHandler));
    }

Метод DialogUtil.showDialog:

public static AlertDialog showDialog(
        Activity activity,
        AlertDialog.Builder builder,
        final int borderTopColorRes,
        final int iconRes,
        final String titleString,
        final String msgString,
        final String specificMsgString,
        final int positiveButtonString,
        final int negativeButtonString,
        final Runnable positiveButtonClickHandler,
        final Runnable negativeButtonClickHandler) {

    final DialogCustomViewBinding binding = DataBindingUtil.inflate(LayoutInflater.from(activity), R.layout.dialog_custom_view, null, false);
    binding.textSpecificMessage.setVisibility(View.GONE);
    if (borderTopColorRes != 0) {
        binding.viewBorderTop.setBackgroundColor(borderTopColorRes);
    } else {
        binding.viewBorderTop.setVisibility(View.GONE);
    }
    if (iconRes != 0) {
        binding.imageCustomDialogMessageType.setImageResource(iconRes);
    }
    if (titleString != null) {
        binding.textCustomDialogTitle.setText(titleString);
        binding.textCustomDialogTitle.setVisibility(View.VISIBLE);
    } else {
        binding.textCustomDialogTitle.setText("");
        binding.textCustomDialogTitle.setVisibility(View.GONE);
    }
    if (msgString != null) {
        binding.textDialogMessage.setText(msgString);
        binding.textDialogMessage.setVisibility(View.VISIBLE);
    } else {
        binding.textDialogMessage.setText("");
        binding.textDialogMessage.setVisibility(View.GONE);
    }

    binding.textSpecificMessage.setVisibility(View.GONE);
    if (specificMsgString != null) {
        binding.textSpecificMessage.setText(specificMsgString);
        binding.textDialogMessage.setOnClickListener(v -> {
            if (binding.textSpecificMessage.getVisibility() == View.VISIBLE) {
                binding.textSpecificMessage.setVisibility(View.GONE);
            } else {
                binding.textSpecificMessage.setVisibility(View.VISIBLE);
            }
        });
    }
    if (positiveButtonClickHandler != null) {
        binding.buttonPositive.setText(positiveButtonString);
        binding.buttonPositive.setOnClickListener(v -> positiveButtonClickHandler.run());
    } else {
        binding.buttonPositive.setVisibility(View.GONE);
    }
    if (negativeButtonClickHandler != null) {
        binding.buttonNegative.setText(negativeButtonString);
        binding.buttonNegative.setOnClickListener(v -> negativeButtonClickHandler.run());
    } else {
        binding.buttonNegative.setVisibility(View.GONE);
    }

    builder.setView(binding.getRoot());
    AlertDialog dialog = builder.create();
    try {
        dialog.show();
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
        return dialog;
    } catch (Exception e) {
        Log.e(TAG, "showDialog: Exception=" + e.getMessage());
        e.printStackTrace();
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...