1

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

对于纵向,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当用户单击后退按钮(例如)时,以更快的方式显示方向更改布局的最佳方式是什么?

4

1 回答 1

0

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

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

stackoverflow 上的一些示例: 在 Fragments 和 Activity 之间传递数据 Data Sharing between Fragments and Activity in Android

或者只是将数据存储在类变量中

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

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

于 2014-03-03T11:21:04.603 回答