在方向更改时保留不同布局的先前数据

时间:2014-03-03 11:10:11

标签: android android-orientation android-inflate onconfigurationchanged

我在一个包含两个布局的活动中有一个片段,用于显示不同的方向。

对于纵向方向, firstLayout

对于横向, secondLayout

两个布局都显示在同一个容器中。

所以我有类似的东西 -

 if ((getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
                    && getActivity().findViewById(R.id.fragment_container) != null) 
    {

            view = inflater.inflate(R.layout.firstLayout, container, false);
            //data

            return view;
    }
    else
    {
            view = inflater.inflate(R.layout.secondLayout, container, false);
            return view;
    }

因此,当用户旋转设备(纵向到横向)时,将调用布局secondLayout。 当用户在布局secondLayout中再次旋转设备时,片段的另一个布局即布局firstLayout将被重新调用。

问题是 -

布局firstLayout需要花费很多时间才能加载回来,好像应用程序因为在onCreate()中执行了大量初始化操作而挂了一段时间。

这样,我希望在没有调用片段中的firstLayout的情况下调用布局onCreate()

所以我刚做了 -

android:configChanges="orientation|screenSize"

然后通过夸大我的布局onConfigurationChanged(Configuration newConfig)来覆盖方法firstLayout。但通过这样做,我丢失了以前的数据。

我也听说setRetainState(true)用于保留以前的状态,但我不知道如何使用它来获取以前的方向更改数据。

在方向更改时显示布局firstLayout的最佳方法是,当用户点击后退按钮时(例如)显示方式更快?

1 个答案:

答案 0 :(得分:0)

setRetainState(true)不适用于2个片段,因此您必须在这2个片段之间传递数据:

谷歌的代码: http://developer.android.com/training/basics/fragments/communicating.html

stackoverflow上的一些示例: Pass data between fragments Data Sharing between Fragments and Activity in Android

或简单地将数据存储在类变量中

如果用户必须输入数据,请不要忘记覆盖onCreateView并在onAttach上附加数据

更多信息: http://developer.android.com/reference/android/app/Fragment.html