我有一个活动。此活动检查用户是否已登录。如果已登录该活动的用户显示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();
}
}
将其他片段添加到backstack中,但不要将登录片段添加到backstack中 –
一旦您使backstack = false ....什么时候让它变为true?请尝试通过使backstack = true为除登录片段之外的片段进行尝试。 –
@ShadowDroid在第二行showFragment方法我设置backstack = true – just