2015-07-22 119 views
0

我有一个活动。此活动检查用户是否已登录。如果已登录该活动的用户显示LoginFragment。如果用户从LoginFragment登录,则它在MainFragment和MainFragment用户中的showin可以转到SettingsFragment。 但是,如果我按SettingsFragment上的后退按钮,它会加载一个空白片段。Android之前的片段空白屏幕

我用“片段导航”这个方法:

public void showFragment(String fragmentName){ 
    Fragment fragment = null; 
    boolean backstack = true; 
    if (fragmentName.equals(SysKeys.MAIN_FRAGMENT)){ 
     fragment = new MainFragment(); 
    } else if (fragmentName.equals(SysKeys.LOGIN_FRAGMENT)){ 
     fragment = new LoginFragment(); 
     backstack = false; 
    } else if (fragmentName.equals(SysKeys.SETTINGS_FRAGMENT)){ 
     fragment = new SettingsFragment(); 
    } else if (fragmentName.equals(SysKeys.CUSTOM_LOGIN_FRAGMENT)){ 
     fragment = new CustomLoginFragment(); 
    } 

    if (fragment != null){ 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.setCustomAnimations(R.anim.slide_in_from_right, R.anim.slide_out_to_left, R.anim.slide_in_from_left, R.anim.slide_out_to_right); 
     fragmentTransaction.replace(R.id.main_layout, fragment, fragmentName); 
     if (backstack){ 
      fragmentTransaction.addToBackStack(null); 
     } 
     fragmentTransaction.commit(); 
    } 
} 

我不想堆栈中的LoginFragment,但其他人我想。我的代码或逻辑有什么问题?

更新: 现在它不显示LoginFragment,如果我按MainFragment上的按钮,但有时它只是重新加载MainFragment,如果我按下后退按钮。 下面是代码:

public void showFragment(String fragmentName){ 
    Fragment fragment = null; 
    boolean backstack = true; 
    if (fragmentName.equals(SysKeys.MAIN_FRAGMENT)){ 
     fragment = new MainFragment(); 
     backstack = false; 
    } else if (fragmentName.equals(SysKeys.LOGIN_FRAGMENT)){ 
     fragment = new LoginFragment(); 
     backstack = false; 
    } else if (fragmentName.equals(SysKeys.SETTINGS_FRAGMENT)){ 
     fragment = new SettingsFragment(); 
    } else if (fragmentName.equals(SysKeys.CUSTOM_LOGIN_FRAGMENT)){ 
     fragment = new CustomLoginFragment(); 
    } 

    if (fragment != null){ 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.setCustomAnimations(R.anim.slide_in_from_right, R.anim.slide_out_to_left, R.anim.slide_in_from_left, R.anim.slide_out_to_right); 
     fragmentTransaction.replace(R.id.main_layout, fragment, fragmentName); 
     if (backstack){ 
      fragmentTransaction.addToBackStack(null); 
     } 
     fragmentTransaction.commit(); 
    } 
} 
+0

将其他片段添加到backstack中,但不要将登录片段添加到backstack中 –

+0

一旦您使backstack = false ....什么时候让它变为true?请尝试通过使backstack = true为除登录片段之外的片段进行尝试。 –

+0

@ShadowDroid在第二行showFragment方法我设置backstack = true – just

回答

0

因为每次你显示片段时,你已经在弹出之前的堆栈中。你为什么要这样做?
尝试删除fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
同时设定,当您创建MainFragment返回堆栈=假,所以它会不会增加MainFragment到堆栈中,你会finhish活动时,按从MainFragment 回
希望这有助于。

+0

我删除了fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);线,但现在如果我登录在LoginFragment和应用程序去MainFragment,我按后退按钮它显示LoginFragment,但我不想看到这个 – just

+0

@ user3275​​938也创建MainFragment时设置backstack = false,所以它不会将MainFragment添加到backstack,并且在从MainFragment回推时您将完成活动 – Minhtdh

+0

谢谢!现在它的工作,但有时如果我在MainFragment,并按下后退按钮,它重新加载MainFragment,为什么? 我用新代码 – just