我正在写一个游戏,其中一个片段连续加载几次,并且屏幕上的元素数量不断增加,因此难度增加。我使用导航图来执行此操作,其中级别对自身具有作用,每次都会传递新参数。到目前为止一切顺利。
唯一的问题是BackStack:如果我保留默认的行为,它将返回到相同的片段,但是分数有一些奇怪的变化。如果我将其设置为直接返回主菜单,则用户可能会误按“后退”按钮,最终会失去进度。
所以我想显示一个警告对话框,提示您决定恢复游戏或返回主菜单。
我知道如何创建对话框,但是当按下后退键时如何显示该对话框?尝试覆盖onBackPressed()
,onNavigateUp()
和onSupportNavigateup()
都会给我一个“不覆盖任何内容”的信息。我还能尝试什么?
答案 0 :(得分:1)
假设您在“活动”中具有以下代码以显示片段:
行吧//<a href='/n/夏正正'>@夏正正</a>:我没有,我没说过。<span class="url-icon"><img alt=[感冒] src="//h5.sinaimg.cn/m/emoticon/icon/default/d_ganmao-babf39d6ae.png" style="width:1em; height:1em;" /></span>//<a href='/n/勺布斯'>@勺布斯</a>:<span class="url-icon"><img alt=[二哈] src="//h5.sinaimg.cn/m/emoticon/icon/others/d_erha-0d2bea3a7d.png" style="width:1em; height:1em;" /></span>//<a href='/n/暴躁豆奶包'>@暴躁豆奶包</a>:逃避虽然舒服但没用//<a href='/n/by语冰'>@by语冰</a>: 难受//<a href='/n/-Lillyyyyyy-'>@-Lillyyyyyy-</a>:扎心
您可以在“活动”中覆盖FragmentManager fm = getSupportFragmentManager();
FragmentTransaction t = fm.beginTransaction();
t.replace(R.id.test, MyFragment.newInstance(), null);
t.addToBackStack(null);
t.commit();
,例如:
onBackPressed()
答案 1 :(得分:0)
我在主要活动中最终使用了以下代码:
override fun onBackPressed() {
val navController = Navigation.findNavController(this, R.id.fragment5)
println(navController.currentDestination?.label)
if(navController.currentDestination?.label.toString() == "ChromaticFragment"){
val dialogBuilder = AlertDialog.Builder(this)
dialogBuilder.setMessage("What do you want to do?")
.setNeutralButton("Resume Level") { dialog, _ ->
dialog.dismiss()
}
.setPositiveButton("Play next level") { _, _ ->
FullscreenActivity.level.levelSelection(FullscreenActivity.makeLevel.nextlevelsetup)
navController.navigate(R.id.action_chromaticFragment_self)
}
.setNegativeButton("Exit to Main Menu") { _, _ ->
navController.popBackStack(R.id.mainFragment, true)
navController.navigate(R.id.action_global_mainFragment)
}
val alert = dialogBuilder.create()
alert.show()
}
else {
super.onBackPressed()
}
}