事务不会删除将用于事务的容器中已经存在的视图。要删除这些视图,您需要将 的初始内容包装ParentFragment
为片段并将其替换为子片段(使用replace
事务而不是add
事务)。我对您的代码进行了一些更改,请在下面查看:
父片段:
public class ParentFragment extends Fragment {
private static final int CONTAINER_ID = 0x2222;
private static final String INITIAL_FRAG = "initial_fragment";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FrameLayout wrapper = new FrameLayout(getActivity());
wrapper.setId(CONTAINER_ID);
// look for our two possible fragments, if we don't find the
// InitialContentFragment add it
if (getChildFragmentManager().findFragmentByTag(INITIAL_FRAG) == null) {
InitialContentFragment initContent = new InitialContentFragment();
Bundle args = new Bundle();
args.putString("text",
"I'm the initial content fragment in the parent fragment");
initContent.setArguments(args);
getChildFragmentManager().beginTransaction()
.add(CONTAINER_ID, initContent, INITIAL_FRAG).commit();
}
return wrapper;
}
public void requestFragmentTransaction() {
FragmentTransaction fragmentTransaction = getChildFragmentManager()
.beginTransaction();
ChildFragment childFragment = new ChildFragment();
Bundle args = new Bundle();
args.putString("text", "Hi I am Child Fragment");
childFragment.setArguments(args);
fragmentTransaction.replace(CONTAINER_ID, childFragment, "ChildFragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
在哪里InitialContentFragment
:
public static class InitialContentFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// inflate the layout file that would normally be in the
// ParentFragment at start
View view = inflater.inflate(R.layout.layout_parentfragment,
container, false);
Bundle bundle = getArguments();
final String text = bundle.getString("text");
TextView textView = (TextView) view.findViewById(R.id.textView1);
textView.setText(text);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ParentFragment parent = (ParentFragment) InitialContentFragment.this
.getParentFragment();
parent.requestFragmentTransaction();
}
});
return view;
}
}
作为旁注,永远不要像你一样忽略 try-catch 块。