Java 用片段实现后台堆栈

Java 用片段实现后台堆栈,java,android,android-fragments,fragment-backstack,Java,Android,Android Fragments,Fragment Backstack,我试图在使用片段时实现一个后堆栈,但当使用“后退”按钮时,我会一直从应用程序中转到主屏幕 活动打开片段A;片段A有一个可点击的文本视图,可以打开片段B(这是可行的)。回击应该会将我返回到片段A,但它会将我带到主屏幕 下面是活动对在onCreate中打开片段A的调用: FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentMa

我试图在使用片段时实现一个后堆栈,但当使用“后退”按钮时,我会一直从应用程序中转到主屏幕

活动打开片段A;片段A有一个可点击的文本视图,可以打开片段B(这是可行的)。回击应该会将我返回到片段A,但它会将我带到主屏幕

下面是活动对在
onCreate
中打开片段A的调用:

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.fragment_layout_container, new FragmentLogin(), "fragment_login")
            .addToBackStack("login_screen")
            .commit();

    Log.d("Back", getFragmentManager().getBackStackEntryCount() +" <- Entry Count at LoginActivity.onCreate" );
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment\u布局\u容器,新FragmentLogin(),“fragment\u登录”)
.addToBackStack(“登录屏幕”)
.commit();
Log.d(“Back”,getFragmentManager().getBackStackEntryCount()+”像这样试试

 public void replaceFragment(Fragment fragment, boolean addToBackStack) {

    FragmentTransaction transaction = getFragmentManager()
            .beginTransaction();

    if (addToBackStack) {
        transaction.addToBackStack(null);

    } else {
        getFragmentManager().popBackStack(null,
                FragmentManager.POP_BACK_STACK_INCLUSIVE);

    }
    transaction.replace(R.id.fragment_layout_container, fragment);
    transaction.commitAllowingStateLoss();
    getFragmentManager().executePendingTransactions();

}
就这样用,

replaceFragment(new FragmentForgottenPassword(), true);

有一个GitHub库可以为您完成这项工作!

每当您显示任何新片段时,只需使用以下代码将该片段推送到堆栈中即可。 //这里这个片段是我们的第一个片段
homeListFragment=新的homeListFragment();
fragmentStack.push(homeListFragment);
它还有许多其他堆栈选项。

在您的活动中使用此选项,它会弹出已添加到backstack的片段

 @Override
 public void onBackPressed()
 {
     if (getFragmentManager().getBackStackEntryCount() > 0) {
         getFragmentManager().popBackStack();
     } else {
         super.onBackPressed();
     }
 }
 @Override
 public void onBackPressed()
 {
     if (getFragmentManager().getBackStackEntryCount() > 0) {
         getFragmentManager().popBackStack();
     } else {
         super.onBackPressed();
     }
 }