【发布时间】:2016-10-09 15:08:43
【问题描述】:
我有一个父片段,即FragmentA,并在其上膨胀了一个子片段FragmentB。在FragmentB 的 onCreateView 函数中试图膨胀另一个片段 `FragmentC'。
片段A.java
public class FragmentA extends Fragment {
private static final String TAG = "FragmentA";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* Inflate the layout for this fragment */
View view = inflater.inflate(R.layout.root_fragment, container, false);
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager
.beginTransaction();
/*
* When this container fragment is created, we fill it with our first
* "real" fragment
*/
transaction.replace(R.id.container_main, new FragmentRecharge());
transaction.addToBackStack(null);
transaction.commit();
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
super.onSaveInstanceState(outState);
}
}
片段B.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.recharge_layout_new, container,
false);
....
try {
((ActivityMain) context).bannerView.setVisibility(View.GONE);
Fragment fragment = new FragmentC();
// fragment.setArguments(bundle);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container_main, fragment);
fragmentTransaction.addToBackStack("my_fragment");
fragmentTransaction.commit();
} catch (Exception e) {
Crashlytics.logException(e);
}
}
FragmentC.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.recharge_layout_new, container,
false);
....
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/tools"
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/fragment_back_color">
<FrameLayout
android:id="@+id/container_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
</FrameLayout>
but it get destroyed automatically and come to `FragmentB`. How can I fix this issue ?
我正在尝试以 1 秒的间隔将 Handler 与 postDelayed 一起使用,然后它正在膨胀 FragmentC 并且工作正常。这看起来不是解决方案。
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
try {
((ActivityMain) context).bannerView.setVisibility(View.GONE);
Fragment fragment = new FragmentC();
// fragment.setArguments(bundle);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container_main, fragment);
fragmentTransaction.addToBackStack("my_fragment");
fragmentTransaction.commit();
} catch (Exception e) {
Crashlytics.logException(e);
}
}
}, 1000);
【问题讨论】:
-
我一直在寻找它,但那不是我的情况。
-
那么 FragmentC 和 FragmentB 是 FragmentA 的子代?
-
无法复制您的问题。如果您可以共享您的整个代码,那就太好了。
-
是的。FragmentB 和 FragmentC 是 fragmentA 的子代。
标签: android android-fragments fragment android-nested-fragment