Android 当我重新加载它时,它是空的片段

Android 当我重新加载它时,它是空的片段,android,android-fragments,Android,Android Fragments,基本上,我有一个main活动,当单击菜单选项时,它会显示不同的片段 Stats,是一个片段,其中显示4个片段。每次显示时,将替换视图上的4个框架布局 第一次运行得很好,但是当我换成不同的片段并返回Stats时,它似乎没有将FrameLayouts替换为fragments Stats如下所示: public class StatsFragment extends Fragment { private View rootView; private MoreSoldBarChartF

基本上,我有一个
main活动
,当单击菜单选项时,它会显示不同的片段

Stats
,是一个
片段
,其中显示4个片段。每次显示时,将替换视图上的4个
框架布局

第一次运行得很好,但是当我换成不同的片段并返回Stats时,它似乎没有将
FrameLayouts
替换为
fragments

Stats
如下所示:

public class StatsFragment extends Fragment {
    private View rootView;

    private MoreSoldBarChartFragment moreSold = MoreSoldBarChartFragment.newInstance(null);
    private MoreIncomeBarChartFragment moreIncome = MoreIncomeBarChartFragment.newInstance(null);
    private SoldLineChartFragment soldLine = SoldLineChartFragment.newInstance(null);
    private IncomeLineChartFragment incomeLine = IncomeLineChartFragment.newInstance(null);

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_stats, container, false);

        initViews();

        return rootView;
    }

    public void initViews() {
        replace(moreIncome, R.id.moreIncome);
        replace(moreSold, R.id.moreSold);
        replace(soldLine, R.id.soldLine);
        replace(incomeLine, R.id.incomeLine);
    }

    private void replace(Fragment fragmentToReplace, int container) {
        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.replace(container, fragmentToReplace);
        ft.commit();
    }

    public static StatsFragment newInstance(Bundle args) {
        StatsFragment fragment = new StatsFragment();
        fragment.setHasOptionsMenu(true);
        fragment.setArguments(args);
        return fragment;
    }
}

您应该使用
getChildFragmentManager()
在片段中显示片段:

private void replace(Fragment fragmentToReplace, int container) {
    FragmentTransaction ft = getChildFragmentManager().beginTransaction();
    ft.replace(container, fragmentToReplace);
    ft.commit();
}
这样可以确保在父级的状态发生更改时(即,当它与另一个片段交换并返回时),正确处理片段。使用
getActivity.getSupportFragmentManager()
时,片段不知道这些片段是相关的,因此无法还原片段