方向更改后如何将片段重新加载到后台堆栈

How to reload fragments into the backstack after orientation change

我的 android 应用程序有一个带有 Activity 的注册流程设置,我将这些步骤作为片段加载到 activity 布局中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    tools:context="com.example.android.ui.RegisterActivity">

    <LinearLayout
        android:id="@+id/register_container"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"></LinearLayout>

</RelativeLayout>

现在每个片段 class 实现了一个 public 在寄存器中实现的接口 Activity 这样我就知道加载下一步片段并将新片段添加到后台堆栈

mFragmentTransaction.addToBackStack(mStepOne.TAG);

现在,通过 4 个步骤一切正常,我可以通过这些步骤返回,同时在每个片段中保留输入的数据,如果它保持相同的方向(纵向)

但是一旦我改变方向,片段视图就会消失

如果我完成了第 3 步,我仍然可以点击后退按钮,它会返回并通过查看后台堆栈更改的侦听器向我显示本来应该存在的片段

mFragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            if(mFragmentManager.getBackStackEntryCount() > 0) {
                Log.d("BACK STACK", "TAG (name): " + mFragmentManager.getBackStackEntryAt( (mFragmentManager.getBackStackEntryCount() - 1)).getName());
            }
        }
    });

保留片段的计数和标签,但不保留视图。 RegisterActivity onCreateView 将术语片段加载到视图中,它是在通过步骤返回时保留在视图中的内容。

mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mTerms = new RegisterFragmentTerms();
mFragmentTransaction.add(R.id.register_container, mTerms);
mFragmentTransaction.commit();

在我看来,这些视图被加载到寄存器Activity 中,彼此重叠,并在方向改变时被清除。有可能解决我想做的事情吗?还是我实施错了?这是我的第一个 android 应用 :)

干杯

好像是Activity娱乐引起的。您是否曾经将 AndroidManifest.xml 中的 android:configChanges="orientation|keyboardHidden|screenSize" 添加到 Activity? ,如果你给你添加那个标志activity,它不会在方向改变时被破坏,碎片堆栈也不会消失。