繁体   English   中英

片段回栈,android?

[英]Fragment back stack, android?

我的活动包括导航抽屉,当前在左侧菜单中有5个选项。 全部以片段开头。

我正在寻找一种方法来保留所有片段的堆栈,因此当用户按下“后退”按钮时,他将移至上一个片段。

类似活动由抽屉式菜单组成,抽屉式菜单具有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();

我曾经像下面这样替换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. 在代码中重写onBackPressed()

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

     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 } } 

参考答案: 这个

您需要将片段添加到堆栈

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM