片段A
View rootView = inflater.inflate(R.layout.fragment_a, container, false);
TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
tvTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentB()).addToBackStack("tag").commit(); }
});
return rootView;
片段B
View rootView = inflater.inflate(R.layout.fragment_b, container, false);
TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
tvTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentC()).commit(); }
});
return rootView;
片段C
View rootView = inflater.inflate(R.layout.fragment_c, container, false);
TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
tvTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getSupportFragmentManager().popBackStack();
}
});
return rootView;
}
点击片段C 中的tvTest时,我看到片段A和片段C的布局彼此重叠
预期行为- 在用片段B替换片段C时,片段B被销毁了,因为它没有addToBackStack()的替换事务。现在在片段C中使用popBackStack()时,片段C应该被破坏并且片段A应该清晰可见。
答案 0 :(得分:2)
这是因为FragmentManager
后堆栈是如何工作的。它是FragmentTransaction
的堆栈,不是 Fragment
。
您的代码具有以下交易记录。
C弹出后堆栈(它使堆栈中的最后一个事务反转(A-> B))-变成B->A。这将导致A和C都可见。