我想将一个片段作为孩子添加到另一个片段中
我正在使用 ChildFragmentManager
这是我的ChildFragmentManagerActivity.java
ChildFragment.java
ParentFragment.java
其布局如下
activity_childfragmentmanager.xml
layout_parentfragment.xml
layout_childfragment.xml
我能够成功添加 ParentFragment 。请检查下面的图像
但是当我尝试添加 ChildFragment 时,它显示如下
我希望通过替换先前的布局来将子片段添加为内容 提前致谢
答案 0 :(得分:4)
事务不会删除将用于事务的容器中已存在的视图。要删除这些视图,您需要将ParentFragment
的初始内容包装为片段,并将其替换为子片段(使用replace
事务而不是add
事务)。我对您的代码进行了一些更改,请在下面查看:
ParentFragment:
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块。