最近写一个地图的app,用到了fragment来进行切换,其中有fragment中显示的是地图,但是发现在切换过程中每次地图会重新加载,实际上就是fragment的重新创建,用户体验不好,而且很耗费流量。
经过查找发现fragment除了replace方法之外还有两个方法show,hide可以解决这个问题。
private void replaceFragment(Fragment fragment) {
if (mFragment != fragment) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
if (!fragment.isAdded()) {
transaction.hide(mFragment).add(R.id.content, fragment)
.commit();
} else {
transaction.hide(mFragment).show(fragment).commit();
}
mFragment = fragment;
}
}
第一种屏幕旋转的情况可以在activity中设置
android:configChanges="orientation|screenSize"
在android3.2的版本也就是13后
android:configChanges="orientation|keyboardHidden"
使用上面的这一种方法还是会重新调用生命周期,因为切屏时屏幕的宽高会改变,所以在minTarget版本13及以后的需要使用screenSize来控制旋转。
而第二种重启activity的情况解决方法有两种
一是重写onSaveInstanceState,将super.onSaveInstanceState(outState);注释掉
二是在activity的oncreate方法中判断savedInstanceState是否为null,如果为空才创建fragmen