片段回堆栈,android?

时间:2015-04-07 05:04:34

标签: android fragment fragment-backstack

我的活动包含导航抽屉,目前在左侧菜单中有5个选项。全部以片段形式打开。

我正在寻找一种方法来保留所有片段的堆栈,所以当用户按下后退按钮时,他会移动到上一个片段。

Like-活动由抽屉菜单组成,它有5个选项menu1,menu2,menu3,menu4,menu5,具有相应的片段F1,F2,F3,F4,F5。

用户按下menu1,他被转发到F1 然后按menu2,然后按menu4。

当用户在F4并且他按下时,他应该被移动到F2而不是退出活动或应用程序。

如何实施,示例或示例代码首选。

我目前使用此代码,但它无法帮助我

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
       .replace(R.id.frame_container, fragment)
       .addToBackStack(null)
       .commit();

3 个答案:

答案 0 :(得分:1)

我曾经像以下一样替换Fragment:

public void replaceFragment(Fragment fragment, boolean addToBackStack, int transition) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.activity_main_relative_container, fragment, fragment.getClass().getName());
    ft.setTransition(transition);
    if (addToBackStack) {
        ft.addToBackStack(fragment.getClass().getName());
    }
    ft.commitAllowingStateLoss();
}

// While to replace Fragment
replaceFragment(mFragment, true, FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// False for not adding Fragment in back stack and true to add.

希望这会有所帮助。

答案 1 :(得分:1)

我找到了一些解决方法:

  1. 在代码中覆盖onBackPressed()

  2. 使用与backstack相关的方法,其中包含您的所有片段事务

    public void onBackPressed(){
    
    FragmentManager fm = getFragmentManager();
    
        if (fm.getBackStackEntryCount() > 0) {
    
            Log.i("MainActivity", "popping backstack");
    
            fm.popBackStack();    // this will display last visible fragment
            getActinBar().setTitle(mTitle);    // save your title in some variable and restore here
    
        } else {
    
             Log.i("MainActivity", "nothing on backstack, calling super");
    
             super.onBackPressed();  // system will handle back key itself
    
        }
    
     }
    
  3. 参考答案:this

答案 2 :(得分:0)

您需要将片段添加到backstack

private FragmentTransaction m_fragmentTransaction;
FragmentOne m_fragOne = new FragmentOne();
m_fragmentTransaction = m_fragmentManager.beginTransaction();
m_fragmentTransaction.replace(R.id.dl_flContainer, m_fragOne , FragmentOne.class.getSimpleName());
m_fragmentTransaction.addToBackStack(FragmentOne.class.getSimpleName());
        m_fragmentTransaction.commit();