Android 保留在运行时添加的片段

Android 保留在运行时添加的片段,android,android-fragments,Android,Android Fragments,我有一个应用程序。那就是使用片段。主要活动从2个片段开始。其中一个片段包含一个按钮,用于在运行时添加第三个片段,如下所示: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Activity activity = getActivity(); if (fragment3 ==

我有一个应用程序。那就是使用片段。主要活动从2个片段开始。其中一个片段包含一个按钮,用于在运行时添加第三个片段,如下所示:

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Activity activity = getActivity();

            if (fragment3 == null) {
                getFragmentManager()
                .beginTransaction()
                .add(R.id.fragment_content3, new ThirdFragment())
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .commit();
        }
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v(getTag(), "FRAG onCreate CALLED!");
    this.setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.third_fragment, container, false);
return view;
第三个片段类如下所示:

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Activity activity = getActivity();

            if (fragment3 == null) {
                getFragmentManager()
                .beginTransaction()
                .add(R.id.fragment_content3, new ThirdFragment())
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .commit();
        }
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v(getTag(), "FRAG onCreate CALLED!");
    this.setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.third_fragment, container, false);
return view;
问题是,我无法理解如何在重新创建活动时避免删除此片段的视图。我试图@Override onCreate()方法并使用setRetainInstance(true)但没有效果

所以,我的问题是:

当重新创建活动时,什么是防止动态(在运行时)添加的片段被删除的正确方法

在这种情况下,您可以通过实现一个额外的回调方法来确保保留有关活动状态的重要信息,该方法允许您保存有关活动状态的信息:
onSaveInstanceState()

在使活动容易被破坏之前,系统将调用
onSaveInstanceState()
。系统向该方法传递一个捆绑包,您可以在其中使用putString()和putInt()等方法将有关活动的状态信息保存为名称-值对。然后,如果系统终止您的应用程序进程,并且用户导航回您的活动,则系统将重新创建活动并将捆绑包传递给
onCreate()
onRestoreInstanceState()
。使用这两种方法中的任何一种,您都可以从捆绑包中提取保存的状态并恢复活动状态。如果没有要还原的状态信息,那么传递给您的Bundle为null(这是第一次创建活动时的情况)

解决方案:

因此,在方法
onSaveInstanceState()
中只有一个bundle来保存有关片段的信息,并且由于片段是一个复杂的对象,因此不能将其直接存储在bundle中

我的建议是@override
onSaveInstanceState()
并使用
布尔值
标志来指示是否应附加第三个片段(visbible)。很快,您就可以使用
OnCreate()或onRestoreInstanceState()
让bundle读取您的标志,并根据它创建或不创建片段