什么是回退栈
使用replace方法切换Fragment,会造成Fragment不断销毁、创建,比如当AFragment跳转到BFragment时AFragment就销毁了,再返回时就直接到activity了.要想返回到AFragment就需要把它在转发时添加到回退栈
-
方法:addToBackStack(null)
例如: getFragmentManager().beginTransaction().replace(R.id.container_f1, bFragment).addToBackStack(null).commitAllowingStateLoss(); -
hide(fragment)方法
但是这样仍然有个毛病.比如在A转发到B之前,我在A里面改变了一些样式,那么转发再回来的时候这些样式会消失,而是显示一个最开始的视图.原因是返回的时候重新调用了onCreateView方法,视图被重新刷新. -
要解决这个问题就不能用replace方法了,而是先把A隐藏,然后在add一个B,这样返回时就不用重新调用onCreateView方法,原来的A视图会保留
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
textView = view.findViewById(R.id.ftv);
btnChange = view.findViewById(R.id.btn_change);
btnReset = view.findViewById(R.id.btn_reset);
btnChange.setOnClickListener(new View.OnClickListener() {
@Override