AlertDialog再次打开

时间:2017-10-26 11:32:29

标签: java android android-fragments android-alertdialog

有一个片段。当我按下此片段上的按钮时,会显示警告对话框。单击“确定”按钮后,此对话框将被忽略。如果我从当前片段转到下一个片段然后再回来 - 之前的片段出现了打开的警告对话框。我用Cicerone进行导航。也许有人遇到过这个问题?

// for navigating
router.navigateTo(screenKey);


// show dialog
AlertDialog alert = new AlertDialog.Builder(this)
        .setTitle(title)
        .setMessage(message)
        .setPositiveButton(R.string.ok, (dialog, which) -> dialog.dismiss())
        .setCancelable(true)
        .create();
alert.show();


// in my second fragment
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    showBackButton();
}


// in my main activity
@Override
public void showBackButton() {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(Utils.getDrawable(this, R.drawable.ic_arrow_back_white_24dp));
    toolbar.setNavigationOnClickListener(v -> {
        onBackPressed();
    });
}

@Override
public void onBackPressed() {
    hideKeyboard();
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
        hideDrawerLayout();
    } else {
        super.onBackPressed();
    }
}

3 个答案:

答案 0 :(得分:1)

@Override
protected void onResume()
{
    super.onResume();
    dialog.close()
}

这样做可以在您创建对话框的父活动中添加此功能。尝试评论并取消注释super.onResume();在测试时。

答案 1 :(得分:0)

我得到的是你在第一行导航,在下一步你正在显示对话框。这些将一个接一个地执行。我希望你明白我的观点。请按以下步骤操作:

 AlertDialog alert = new AlertDialog.Builder(this)
        .setTitle(title)
        .setMessage(message)
        .setPositiveButton(R.string.ok, (dialog, which) ->
                dialog.dismiss()// Optinal
                router.navigateTo(screenKey);
        )
        .setCancelable(true)
        .create();
alert.show();

并且无需关闭对话框,导致其出现AlertDialog的默认行为。让我知道它解决了您的问题。感谢。

答案 2 :(得分:0)

好吧,我找到了解决方案。重点是我的项目中使用了Moxy框架,我没有在我的视图中设置正确的状态策略类型。现在我使用SkipStrategy来不在队列中堆积命令。抱歉,我花了你的时间:)。