如何防止通过点击刚刚打开的片段来打开新的片段?
How to prevent opening a new fragment by clicking on the one just opened?
我使用 RecyclerView 创建了项目网格。当用户单击该项目时,将打开全屏片段。它运作良好。但是当用户单击任何全屏片段表面时,我看到了奇怪的情况,来自 RecyclerView 网格的新片段打开。事实证明,用户实际上单击了片段下方的按钮。如何避免这种情况?
以下是如何组织点击监听的代码块:
SetGrid.adapter = TestAdapter{ position ->
when (position) {
0 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, OneFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
1 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, TwoFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
2 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, ThreerFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
}
根据您所说,您在后台的片段正在触发 on-touch 导航。你可以从后台堆栈中删除它,因为我看到你使用了 disallowAddToBackStack()
。我怀疑它没有按预期工作,因此最好在片段的 oncreate 方法中使用“popBackStack()
”。
我使用 RecyclerView 创建了项目网格。当用户单击该项目时,将打开全屏片段。它运作良好。但是当用户单击任何全屏片段表面时,我看到了奇怪的情况,来自 RecyclerView 网格的新片段打开。事实证明,用户实际上单击了片段下方的按钮。如何避免这种情况?
以下是如何组织点击监听的代码块:
SetGrid.adapter = TestAdapter{ position ->
when (position) {
0 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, OneFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
1 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, TwoFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
2 -> {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fr_frame, ThreerFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
}
根据您所说,您在后台的片段正在触发 on-touch 导航。你可以从后台堆栈中删除它,因为我看到你使用了 disallowAddToBackStack()
。我怀疑它没有按预期工作,因此最好在片段的 oncreate 方法中使用“popBackStack()
”。