Java 安卓碎片不能保存它们的状态

Java 安卓碎片不能保存它们的状态,java,android,android-fragments,Java,Android,Android Fragments,我正在尝试创建自定义选项卡导航。单击每个选项卡,它将替换屏幕中的片段。在MainActivity.java上,我创建每个片段的一个副本(我认为,通过这种方式,我可以在任何地方使用每个片段的一个副本) 单击tab按钮时,它将旧片段替换为当前片段(handleClickmethod) WhereRootFragment: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, B

我正在尝试创建自定义选项卡导航。单击每个选项卡,它将替换屏幕中的片段。在MainActivity.java上,我创建每个片段的一个副本(我认为,通过这种方式,我可以在任何地方使用每个片段的一个副本)

单击tab按钮时,它将旧片段替换为当前片段(handleClickmethod)

WhereRootFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    /* Inflate the layout for this fragment */
    View view = inflater.inflate(R.layout.fragment_where_root, container, false);

    FragmentTransaction transaction = getFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.where_root_frame, MainActivity.whereMainFragment);
    transaction.addToBackStack(null);
    transaction.commit();

    return view;
}
wheremain片段

@Override
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_where_main,
            container, false);
    return rootView;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    /* Inflate the layout for this fragment */
    View view = inflater.inflate(R.layout.fragment_where_root, container, false);

    // Use child fragment manager to manage WhereMainFragment
    FragmentTransaction transaction = getChildFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.where_root_frame, MainActivity.whereMainFragment);
    transaction.addToBackStack(null);
    transaction.commit();

    return view;
}
结果:

[StartApp]->[1.其中:显示]->[2.提要:显示]->[3.其中:未显示]->[4.提要:显示已保存状态]->[5.另一个片段:按假设为空]->[6.提要:未显示]


问题:如何解决这个问题?如何使片段保存其状态?

有些链接可能对您有用:

->你可能不得不使用

->

->你可能想要这个

->最好的


其中rootfragment
由属于活动的片段管理器管理。之所以出现此问题,是因为使用了相同的片段管理器来管理
WhereMainFragment
,它是
WhereRootFragment
的子级

WhereMainFragment
应由属于
WhereRootFragment
的片段管理器管理。要在片段中获取子片段管理器,请使用

WhereRootFragment

@Override
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_where_main,
            container, false);
    return rootView;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    /* Inflate the layout for this fragment */
    View view = inflater.inflate(R.layout.fragment_where_root, container, false);

    // Use child fragment manager to manage WhereMainFragment
    FragmentTransaction transaction = getChildFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.where_root_frame, MainActivity.whereMainFragment);
    transaction.addToBackStack(null);
    transaction.commit();

    return view;
}

这正是您想要删除的
transaction\u feed.addToBackStack(null)
来自onClick事件。@PratikButani,我已经按照你所说的做了尝试,但在
WhereRootFragment
而不是
getFragmentManager
使用
getChildFragmentManager时没有帮助,因为
WhereMainFragment`是
WhereRootFragment
的孩子。谢谢你的回答,但这种方式不适合我。因为每个片段将包含许多视图,在其他片段中。有没有办法在不恢复每个视图状态的情况下自动处理此问题?
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    /* Inflate the layout for this fragment */
    View view = inflater.inflate(R.layout.fragment_where_root, container, false);

    // Use child fragment manager to manage WhereMainFragment
    FragmentTransaction transaction = getChildFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.where_root_frame, MainActivity.whereMainFragment);
    transaction.addToBackStack(null);
    transaction.commit();

    return view;
}