首页 > 解决方案 > 片段中的自定义后退按钮行为,使用导航图

问题描述

我正在编写一个游戏,其中一个片段连续多次加载,屏幕上的元素数量越来越多,因此难度增加。我用一个导航图来做到这一点,其中关卡有一个对自身的动作,它每次都传递新的参数。到目前为止,一切都很好。

唯一的问题是 BackStack:如果我保持默认行为,它会回到同一个片段,但分数数字会发生一些奇怪的变化。如果我将其设置为直接返回主菜单,用户可能会错误地点击后退按钮,最终失去进度。

所以我想显示一个警告对话框,提示决定是恢复游戏还是返回主菜单。

我知道如何创建对话框,但是当按下返回时如何显示它?试图覆盖onBackPressed(),每个都给我一个“不覆盖任何东西”的消息onNavigateUp()onSupportNavigateup()我还能尝试什么?

标签: androidandroid-fragmentskotlinnavigation

解决方案


假设您在 Activity 中有以下代码来显示片段:

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction t = fm.beginTransaction();
t.replace(R.id.test, MyFragment.newInstance(), null);
t.addToBackStack(null);
t.commit();

您可以在 Activity 中覆盖onBackPressed(),例如:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    // ...
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            MyActivity.super.onBackPressed();
        }
    });
    builder.setNegativeButton("Cancel", null);
    builder.show();
}

推荐阅读