我在一个包含两个布局的活动中有一个片段,用于显示不同的方向。
对于纵向方向, 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
的最佳方法是,当用户点击后退按钮时(例如)显示方式更快?
答案 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