android - 片段中的自定义后退按钮行为,使用导航图
问题描述
我正在编写一个游戏,其中一个片段连续多次加载,屏幕上的元素数量越来越多,因此难度增加。我用一个导航图来做到这一点,其中关卡有一个对自身的动作,它每次都传递新的参数。到目前为止,一切都很好。
唯一的问题是 BackStack:如果我保持默认行为,它会回到同一个片段,但分数数字会发生一些奇怪的变化。如果我将其设置为直接返回主菜单,用户可能会错误地点击后退按钮,最终失去进度。
所以我想显示一个警告对话框,提示决定是恢复游戏还是返回主菜单。
我知道如何创建对话框,但是当按下返回时如何显示它?试图覆盖onBackPressed()
,每个都给我一个“不覆盖任何东西”的消息onNavigateUp()
。onSupportNavigateup()
我还能尝试什么?
解决方案
假设您在 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();
}
推荐阅读
- javascript - 更改克隆元素的按钮文本
- java - 如何处理对外部 REST 服务的请求并将响应返回给 Google Assistant?
- tensorflow - load_model 错误:ValueError:tensorflow.keras 时模型配置格式不正确
- r - 将函数应用于同一组中的所有对
- winapi - 获取子窗口句柄
- ruby-on-rails - 如何在 ruby on rails 中集成多个支付网关(多个商家)?
- css - 如何使用 input[type="submit"] 属性将 CSS 转换为 Styled-Components?
- multithreading - 如何等待多个批处理文件完成
- css - 隐藏 flexbox 子项并再次显示
- java - org.openqa.selenium.SessionNotCreatedException:未创建会话:此版本的 ChromeDriver 仅支持使用 Selenium 的 Chrome 版本 75