我有一个带有 4 个菜单选项的菜单...每个选项都显示相应的片段。我有 3 个函数可以添加、显示和隐藏片段:
private void addFragment(Fragment newFragment, String fragmentName) {
fragmentManager
.beginTransaction()
.add(R.id.content_frame, newFragment,
fragmentName).addToBackStack(null)
.commit();
}
private void hideFragment(Fragment existingFragment) {
if(existingFragment!=null && existingFragment.isVisible()){
fragmentManager.beginTransaction().hide(existingFragment).addToBackStack(null).commit();
}
}
private void showFragment(Fragment existingFragment) {
if(existingFragment!=null){
fragmentManager.beginTransaction().show(existingFragment)
.addToBackStack(null).commit();
}
}
导航开关逻辑如下:
onNavItemSelected(int id) {
switch (id) {
case 1: //option 1 - hide rest of the fragments and show Option1Fragment
hideFragment(option2Fragment);
hideFragment(option3Fragment);
hideFragment(option4Fragment);
if (Option1FragmentDoesnotExist) { //create option1Fragment and add it to FragmentTransaction
option1Fragment = new option1Fragment();
addFragment(option1Fragment,"option1Fragment");
} else
showFragment(option1Fragment);
break;
case 2:
//same as option 1
}
}
我期望发生的事情: 现在发生的事情: 我知道我在向/从后台堆栈添加和检索片段时犯了一些错误。但是,我不确定它到底是什么。我也尝试将所有这些作为同一事务的一部分进行..这也有效..另外,我不想替换碎片...希望我的问题是正确的..感谢您的帮助。谢谢!