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