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