片段回栈,android?
Fragment back stack, android?
我的 activity 由导航抽屉组成,目前在左侧菜单中有 5 个选项。全部以片段形式打开。
我正在寻找一种方法来保留所有片段的堆栈,以便当用户按下后退按钮时,他会移动到上一个片段。
喜欢- Activity 由抽屉菜单组成,有 5 个选项 menu1, menu2, menu3, menu4, menu5 有相应的片段 F1, F2, F3, F4, F5。
用户按菜单 1 他被转发到 F1
然后按 menu2,再按 menu4。
当用户在 F4 并按下返回时,他应该被移动到 F2 而不是退出 activity 或应用程序。
它是如何实现的,首选示例或示例代码。
我目前使用此代码,但它对我没有帮助
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.
希望这对您有所帮助。
我为您的查询找到了一些解决方法:
在代码中覆盖 onBackPressed()
使用与维护的后台堆栈相关的方法,其中包含您的所有片段交易
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
}
}
参考答案:this
您需要将片段添加到 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();
我的 activity 由导航抽屉组成,目前在左侧菜单中有 5 个选项。全部以片段形式打开。
我正在寻找一种方法来保留所有片段的堆栈,以便当用户按下后退按钮时,他会移动到上一个片段。
喜欢- Activity 由抽屉菜单组成,有 5 个选项 menu1, menu2, menu3, menu4, menu5 有相应的片段 F1, F2, F3, F4, F5。
用户按菜单 1 他被转发到 F1 然后按 menu2,再按 menu4。
当用户在 F4 并按下返回时,他应该被移动到 F2 而不是退出 activity 或应用程序。
它是如何实现的,首选示例或示例代码。
我目前使用此代码,但它对我没有帮助
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.
希望这对您有所帮助。
我为您的查询找到了一些解决方法:
在代码中覆盖
onBackPressed()
使用与维护的后台堆栈相关的方法,其中包含您的所有片段交易
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 } }
参考答案:this
您需要将片段添加到 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();