Android 单个活动中替换片段的奇怪行为

Android 单个活动中替换片段的奇怪行为,android,android-fragments,Android,Android Fragments,在同一活动中替换片段时,我面临一种奇怪的行为,发生了以下情况: -我有一个signinFragment,它是ahauthenticationactivity中的默认片段 -我有一个界面,当我点击按钮时可以在片段之间切换,比如signUp -我在活动中实现接口,并检查为接口函数传递的编号,然后打开指定的片段 @覆盖 创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle s

在同一活动中替换片段时,我面临一种奇怪的行为,发生了以下情况:

-我有一个
signinFragment
,它是
ahauthenticationactivity
中的默认片段

-我有一个界面,当我点击按钮时可以在片段之间切换,比如
signUp

-我在活动中实现接口,并检查为接口函数传递的编号,然后打开指定的片段

@覆盖
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
View rootView=充气机。充气(R.layout.fragment\u登录,容器,false);
ButterKnife.bind(这个,rootView);
signInButton.setOnClickListener(视图->startActivity(新意图(getActivity(),MainActivity.class));
signUpTextView.setOnClickListener(视图->listener.switchFragment(Constants.SIGNUP_FRAGMENT));
forgetPasswordTextView.setOnClickListener(视图->listener.switchFragment(常量.忘记密码\u片段));
返回rootView;
}
  • 认证活动
@覆盖
公共void开关片段(int片段){
开关(片段){
case Constants.SIGNUP_片段:{
Log.d(标记为“已启动注册”);//这显示已启动注册
//忘记密码启动我不知道为什么?!
fragmentManager.beginTransaction().replace(R.id.Authentication\u Activity\u容器,signUpFragment).addToBackStack(TAG.commit();
}case Constants.FORGET_PASSWORD_片段:{
Log.d(TAG,“ForgetPassword启动”);//这可以很好地使用ForgetPassword启动
fragmentManager.beginTransaction().replace(R.id.Authentication\u Activity\u容器,forgetPasswordFragment).addToBackStack(TAG.commit();
}
}
}
@凌驾
public void onBackPressed(){
如果(fragmentManager.GetBackbackEntryCount()>0){
fragmentManager.popBackStack(标签、POP_BACK_STACK_包括在内);
}否则{
super.onBackPressed();
}
}

因此,当我点击
signUp
时,
Log
会显示
signUp-launted
然后
ForgetPassword-launted
当我点击
ForgetPassword-launted
时,
Log
会显示
ForgetPassword-launted
,我不明白为什么会发生这种情况?

您错过了开关箱之间的中断

最后一个代码块应为:

@Override
    public void switchFragment(int fragment) {
        switch (fragment){
            case Constants.SIGNUP_FRAGMENT: {
                Log.d(TAG,"SignUP Launched"); // this shows SignUP Launched
                                              //ForgetPassword Launched i don't know why?!
                fragmentManager.beginTransaction().replace(R.id.Authentication_Activity_Container, signUpFragment).addToBackStack(TAG).commit();
            }
break;
case Constants.FORGET_PASSWORD_FRAGMENT:{
                Log.d(TAG,"ForgetPassword Launched"); //this works fine ForgetPassword Launched
                fragmentManager.beginTransaction().replace(R.id.Authentication_Activity_Container, forgetPasswordFragment).addToBackStack(TAG).commit();
            }
        }
    }

    @Override
    public void onBackPressed() {
        if(fragmentManager.getBackStackEntryCount()>0){
            fragmentManager.popBackStack(TAG, POP_BACK_STACK_INCLUSIVE);
        }else {
            super.onBackPressed();
        }
    }

在两种情况之间的switch语句中没有
break
,因此在这两种情况下,最后一种情况都将始终执行。OMG,为这个愚蠢的错误感到抱歉。没问题,有时代码需要另一双眼睛才能“见木不见树”。