简体   繁体   English

onbackpressed的嵌套片段转到MainActivity而不是后片段

[英]Nested Fragment onbackpresssed goes to MainActivity instead of back fragment

I move From Activity to FagmentA then FragmentA to FragmentB. 我从“活动”移到“ FagmentA”,然后从“片段A”移到“片段B”。 When Press back Button while staying in FragmentB it goes to MainActivity(It should move to a Back fragment which is FragmentA). 当停留在FragmentB中的同时按向后按钮时,它将转到MainActivity(它应移至一个Back片段,即FragmentA)。 what's wrong with it? 它出什么问题了?

Moving from Activity to FragmentA 从活动转移到FragmentA

   Fragment fragment = new FragmentA() ;
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,
                    android.R.anim.fade_out);
            fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commitAllowingStateLoss();

Moving FramgentA to FragmentB 将FramgentA移至FragmentB

 layout.removeAllViewsInLayout();
            Fragment fragment =new FragmentB ;
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.frame, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

Onbackpressed MainActivity 后压式MainActivity

 @Override
public void onBackPressed() {
    android.app.FragmentManager fm = getFragmentManager();
    if(fm.getBackStackEntryCount()>0){
        fm.popBackStack();
    }else{
        super.onBackPressed(); 
    }

Your problem is with your imports of FragmentManager you use both : 您的问题是您同时使用FragmentManager的导入:

android.support.v4.app.FragmentManager and android.app.FragmentManager android.support.v4.app.FragmentManagerandroid.app.FragmentManager

change this : 改变这个:

@Override
public void onBackPressed() {
    android.app.FragmentManager fm = getFragmentManager();
    if(fm.getBackStackEntryCount()>0){
        fm.popBackStack();
    }else{
        super.onBackPressed(); 
    }

to: 至:

@Override
public void onBackPressed() {
    FragmentManager fm = getSupportFragmentManager();
    if(fm.getBackStackEntryCount()>0){
        fm.popBackStack();
    }else{
        super.onBackPressed(); 
    }

You only add Fragment s using the support FragmentManager meaning your existing code will always return 0 here -> fm.getBackStackEntryCount() until you use correct support FragmentManager 您只能使用支持FragmentManager添加Fragment这意味着您的现有代码将始终在此处返回0-> fm.getBackStackEntryCount()直到您使用正确的支持FragmentManager为止

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM