0

我有如下所示的android屏幕布局

在此处输入图像描述

应用程序屏幕分为 3 个片段,页眉、页脚和内容。页眉和页脚片段是固定的。内容片段根据内容而变化。我根据需要替换了fragment1-fragment3。最初 Fragment1 显示在内容区域中。当我按下下一个按钮时,fragment1 被 fragment2 替换。这是命令。我有一个问题,如果我之前按下另一个按钮,我怎样才能返回到上一个片段(片段2->片段1)。片段类中是否有任何内置机制可用。

请指导我...

提前致谢

4

3 回答 3

2

试试这个代码

FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();
于 2013-09-27T10:03:02.553 回答
1

您可以尝试以下方法:

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

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

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

于 2013-09-27T10:10:47.590 回答
1

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

 ft.addToBackStack(null); 

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

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

 }

之后调用这个:

 getSupportFragmentManager().popBackStack();
 DeleteCurrentFragment();
于 2013-09-27T10:40:47.443 回答