Java 片段未打开“后退”按钮上的上一个片段
我一直在努力实现一个超级简单的应用程序布局,我的Java 片段未打开“后退”按钮上的上一个片段,java,android,android-fragments,back-stack,fragment-backstack,Java,Android,Android Fragments,Back Stack,Fragment Backstack,我一直在努力实现一个超级简单的应用程序布局,我的MainActivity在其onCreate方法中打开Fragment#1,然后单击某个项目时,Fragment#1打开Fragment#2 现在,当我从我的main活动打开Fragment#1时,我将Fragment#1添加到backbackbackback。打开Fragment#2后,当我按下后退按钮时,第一次单击不起任何作用,然后第二次单击将我发送回登录页面,跳过Fragment#1和MainActivity 当我点击Fragment#2上的
MainActivity
在其onCreate
方法中打开Fragment#1
,然后单击某个项目时,Fragment#1
打开Fragment#2
现在,当我从我的main活动
打开Fragment#1
时,我将Fragment#1
添加到backbackbackback。打开Fragment#2
后,当我按下后退按钮时,第一次单击不起任何作用,然后第二次单击将我发送回登录页面,跳过Fragment#1
和MainActivity
当我点击Fragment#2
上的后退按钮时,它会打开Fragment#1
备份?
(MainActivity
打开Fragment#1
)
(Fragment#1
打开Fragment#2
)
编辑
我应该提到的是,我曾试图亲自处理这件事。我尝试将其添加到我的MainActivity
,但没有改变行为:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
} else {
getSupportFragmentManager().popBackStack();
}
}
再创造
Kotlin
val backpress = requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, true) {
// Handle the back button event
}
Java
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
// Handle the back button event
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
您可以在相关章节中提供您的背部操作。您建议我如何放置处理程序?类似于
FragmentManager.popBackStack()
?您能澄清一下吗?这就是我在创建Fragment#1
时在onCreate
中实现的几乎完全相同的代码,因为它们没有解释如何解决问题,所以不建议在堆栈溢出时使用代码。请编辑您的答案,以解释此代码的作用以及它如何回答问题,以便对OP以及具有类似问题的其他用户有用。
getSupportFragmentManager().beginTransaction().replace(R.id.frag_frame, fragment).addToBackStack("text").commit();
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
// Handle the back button event
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_frame, fragment).addToBackStack("text").commit();