我正在使用登录系统做APP,现在我在登录时遇到问题,当我输入凭据时,我用另一个界面替换了片段,但如果用户按下后面按钮,应用程序返回登录屏幕(片段)。我想知道如果用户已登录,如何删除登录屏幕。
我用以下内容更改片段:
FragmentTransaction transaction_to_main = getFragmentManager().beginTransaction();
transaction_to_main.setCustomAnimations(R.anim.modal_in, R.anim.modal_out);
transaction_to_main.replace(R.id.container, new MainFragment());
transaction_to_main.addToBackStack(null);
transaction_to_main.commit();
我试图使用我在论坛中阅读的这部分代码来清除backstack,但是我得到了一个NullPointerException
while (getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStackImmediate();
}
谢谢
编辑:
在主要活动中,在onCreate:
if(savedInstanceState != null || shared_pref.contains("access_token")){
shared_pref_token = shared_pref.getString("access_token", "");
shared_pref_refresh_token = shared_pref.getString("refresh_token", "");
//Check if token is valid, if not, a new token is requested
check_token(shared_pref_token);
}else{
iv_logout.setVisibility(View.GONE);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.modal_in, R.anim.modal_out);
transaction.replace(R.id.container, new AccessFragment());
transaction.addToBackStack(null);
transaction.commit();
//getSupportFragmentManager().beginTransaction().setTransition(R.anim.modal_in).replace(R.id.container, new AccessFragment()).commit();
}
AccessFragment在onCreate中有:
bt_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.modal_in, R.anim.modal_out);
transaction.replace(R.id.container, new LoginFragment());
transaction.addToBackStack(null);
transaction.commit();
getFragmentManager().beginTransaction().remove(getTargetFragment()).commit();
/*new SweetAlertDialog(getActivity(), SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("Sesión iniciada en GECAS")
.show();*/
}
});
bt_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.modal_in, R.anim.modal_out);
transaction.replace(R.id.container, new RegisterFragment());
transaction.addToBackStack(null);
transaction.commit();
getFragmentManager().beginTransaction().remove(getTargetFragment()).commit();
}
});
答案 0 :(得分:1)
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
是清除靠背的正确方法。
答案 1 :(得分:1)
如果使用addToBackStack删除该行
transaction_to_main.addToBackStack(null);
首先它不应该被添加到Backstack中。
答案 2 :(得分:0)
活动
finish();
在片段上
getActivity().finish();
答案 3 :(得分:-1)
正如一些模式所说,删除行transaction.addToBackStack(null)解决了这个问题。谢谢。