【问题标题】:How to reload fragments into the backstack after orientation change方向更改后如何将片段重新加载到后台堆栈
【发布时间】:2015-02-05 06:07:45
【问题描述】:

我的 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>

现在每个片段类都实现了一个在 RegisterActivity 中实现的公共接口,以便我知道加载下一步片段并将新片段添加到后台堆栈

mFragmentTransaction.addToBackStack(mStepOne.TAG);

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

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

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

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();

在我看来,视图被加载到 RegisterActivity 中,并在方向更改时被清除。是否有可能解决我正在尝试做的事情?还是我实施错了?这是我的第一个安卓应用 :)

干杯

【问题讨论】:

    标签: android android-fragments android-appcompat android-orientation


    【解决方案1】:

    这似乎是由 Activity 娱乐引起的。你有没有在你的AndroidManifest.xml 中添加android:configChanges="orientation|keyboardHidden|screenSize" 到你的活动中? ,如果你把那个标志加到你的activity中,当方向改变时它不会被销毁,碎片堆栈也不会消失。

    【讨论】:

    • 就是这么简单,哈哈,干杯,伙计,这就是你在学习新东西时得到的:)
    • 对于阅读本文的其他人来说,这不是一个安全的解决方案。还有其他情况,Android 会终止您的活动。例如,当您的应用最小化时正在使用其他资源密集型应用时。
    • @G.Steigert,如果只是为了改变方向,那可能是安全的,而至于在activity重新创建或进程重启后恢复状态,那肯定是另一个话题了。
    • @jobcrazy 你是对的。但 OP 表示这是他的第一个 Android 应用程序。我猜他试图解决一个特定的问题(在方向变化期间观察到),但把其他情况放在一边。我只是想提个醒..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多