使用replace()切换Fragment时原有Fragment未被替换问题求助
问题原因
- 核心错误是执行Fragment替换时指定的容器ID不正确:你调用
replace()方法时传入的R.id.forgot_password_email_fragment是ForgotPasswordEmailFragment自身根布局的ID,而非两个Fragment共同的宿主容器R.id.main_container。 - 此时逻辑相当于把新的
ForgotPasswordNewPasswordFragment嵌入到了旧Fragment的布局内部,旧Fragment本身仍然挂载在Activity的main_container容器中,两个Fragment的布局自然会叠加显示。
修复方案
修改ForgotPasswordEmailFragment内按钮点击的Fragment事务代码,将替换的容器ID改为Activity的公共容器R.id.main_container即可:
val forgotPasswordNewPasswordFragment: Fragment = ForgotPasswordNewPasswordFragment() val fragmentTransaction: FragmentTransaction = parentFragmentManager.beginTransaction() // 仅修改这一行的容器ID即可 fragmentTransaction.replace(R.id.main_container, forgotPasswordNewPasswordFragment) fragmentTransaction.addToBackStack(null) fragmentTransaction.commit()
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

