关于Android Fragments:Android Fragments – 如何实现Backstacking和Recalling previous fragment

Android Fragments - How to implement Backstacking and Recalling previous fragment

我有如下所示的安卓屏幕布局

enter

请指导我...

提前致谢


试试这个代码

1
2
FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack("tag" ).commit();


每当您尝试调用新片段时,请通过

为其添加回堆栈

1
 ft.addToBackStack(null);

现在,如果您想从一个片段返回到另一个片段,请创建一个方法..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void DeleteCurrentFragment()
{
 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

 Fragment currentFrag =  getSupportFragmentManager().findFragmentById(R.id.detailFragment);


 String fragName ="NONE";

 if (currentFrag!=null)
    fragName = currentFrag.getClass().getSimpleName();


 if (currentFrag != null)
    transaction.remove(currentFrag);

 transaction.commit();

 }

然后调用这个:

1
2
 getSupportFragmentManager().popBackStack();
 DeleteCurrentFragment();


您可以尝试以下操作:

1
2
3
4
5
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.add(R.id.contentFragment, <your fragment>);
ft.addToBackStack(null);
ft.commit();

所以假设你在 fragment1 上,在做了一些你想要推 fragment2 的事情之后,你可以在你的 contentFragmentaddreplace 片段(在这种情况下为 fragment2)根据您的要求。现在,当您调用 addToBackStack 时,这意味着将此事务添加到后台堆栈中。这样事务在提交后会被记住,并且在稍后从堆栈中弹出时会反转其操作。它在内部维护一个堆栈,因此您不想做任何事情。最后,当您从 fragment2 按下返回按钮时,它会检查事务堆栈中是否有任何片段,如果是,则调用它。它就像栈顶。当您在该堆栈中调用 addToBackStack 时,会添加 fragment1。因此,当您按下后退按钮时,堆栈的顶部是 fragment1,因此它会调用它。

当您按下硬件后退按钮时会发生这种情况。如果您想在任何按钮上执行此操作,则在该按钮的单击侦听器上只需使用 onBackPressed() 方法。