如何完成一个片段?

时间:2014-12-15 15:25:14

标签: android android-fragments

我正在使用登录系统做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,但是我得到了一个N​​ullPointerException

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();
            }
        });

4 个答案:

答案 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)解决了这个问题。谢谢。