KK_*_*585 3 android fragment android-fragments android-fragmentactivity
我想将片段作为子片段添加到
我正在使用ChildFragmentManager的另一个片段中
这是我的ChildFragmentManagerActivity.java
ChildFragment.java
ParentFragment.java,
其布局如下
activity_childfragmentmanager.xml
layout_parentfragment.xml
layout_childfragment.xml
我能够成功添加ParentFragment。请检查下图
但是当我尝试添加ChildFragment时,它显示如下
我希望通过替换以前的布局将子片段添加为内容,
谢谢
事务不会删除将用于事务的容器中已经存在的视图。要删除这些视图,您需要将的初始内容包装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();
}
Run Code Online (Sandbox Code Playgroud)
}
哪里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;
}
}
Run Code Online (Sandbox Code Playgroud)
附带说明一下,切勿像您一样忽略try-catch块。