Android 维护以前活动的备份
我有两个活动A和B,在活动A中,我管理了片段回栈,但在一种情况下如下所示: 我在活动中有4个片段,从片段1到2到3到4,然后从第4个片段到活动B,现在我想要的是按下后退按钮,活动的片段4应该打开,然后是后面的片段3,依此类推 我使用以下函数替换片段并管理后堆栈Android 维护以前活动的备份,android,android-fragments,back,fragment-backstack,Android,Android Fragments,Back,Fragment Backstack,我有两个活动A和B,在活动A中,我管理了片段回栈,但在一种情况下如下所示: 我在活动中有4个片段,从片段1到2到3到4,然后从第4个片段到活动B,现在我想要的是按下后退按钮,活动的片段4应该打开,然后是后面的片段3,依此类推 我使用以下函数替换片段并管理后堆栈 private void changeFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager();
private void changeFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.act_home_fl_container, fragment).commit();
}
背压
boolean isPopFragment = getSupportFragmentManager().getBackStackEntryCount() > 0 ? true : false;
if (isPopFragment) {
getSupportFragmentManager().popBackStack();
}
到目前为止我取得了成功,但当我从第4个片段转到活动B,再回到活动A时,我无法管理活动A的后一堆片段
我不知道如何开始。你可以在你的活动中覆盖
onBackPressed
,检查哪个片段在上面,然后决定你想做什么:
@Override
public void onBackPressed()
{
// code here
super.onBackPressed(); // check if you need this, depends on your needs
}
你可以在你的活动中覆盖
onBackPressed
,检查哪个片段在上面,然后决定你想做什么:
@Override
public void onBackPressed()
{
// code here
super.onBackPressed(); // check if you need this, depends on your needs
}
使用此代码更改片段
public static void addFragment( final Fragment newFragment, final Fragment hideFragment) {
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.hide(hideFragment);
fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName());
fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName());
fragmentTransaction.commitAllowingStateLoss();
}
newFragment“要添加的片段”hideFragment“容器上的片段”使用此代码更改片段
public static void addFragment( final Fragment newFragment, final Fragment hideFragment) {
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.hide(hideFragment);
fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName());
fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName());
fragmentTransaction.commitAllowingStateLoss();
}
newFragment“要添加的片段”HIDEFRAGENT“容器上的片段”只需在提交之前使用
addToBackStack(tag\u name)
您可以在kotlin中添加en扩展功能
fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =
supportFragmentManager.beginTransaction()
.replace(containerId, fragment, fragment.javaClass.name)
.addToBackStack(fragment.javaClass.name).commit()
只需在提交之前使用
addToBackStack(tag\u name)
您可以在kotlin中添加en扩展功能
fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =
supportFragmentManager.beginTransaction()
.replace(containerId, fragment, fragment.javaClass.name)
.addToBackStack(fragment.javaClass.name).commit()
您必须为两个活动维护两个堆栈。尽管您可以在同一活动中管理片段。我建议你看看这个github项目。[.这些人做了一个很好的实现。@Rajesh你有解决方案吗..如果有,请指导我,你必须为两个活动维护两个堆栈。虽然你可以在同一个活动中管理片段。我建议你看看这个github项目。[.这些人做了一个很好的实施。@Rajesh你有解决方案吗..如果有,请给我同样的指导