4

我有一个带有 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
    }
}

我期望发生的事情: 在此处输入图像描述 现在发生的事情: 在此处输入图像描述 我知道我在向/从后台堆栈添加和检索片段时犯了一些错误。但是,我不确定它到底是什么。我也尝试将所有这些作为同一事务的一部分进行..这也有效..另外,我不想替换碎片...希望我的问题是正确的..感谢您的帮助。谢谢!

4

0 回答 0