fragment中添加地图进行切换时会出现黑屏闪烁现象,其主要原因在于百度地图本身释放时导致的,那么对应的解决方案就是不释放百度地图对应的fragment。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<FrameLayout
android:id="@+id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout
android:id="@+id/mapcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
</FrameLayout>
fragment切换时进行隐藏而不是销毁:
tabContent.setVisibility(View.VISIBLE);
mapContent.setVisibility(View.INVISIBLE);
上述中tabContent不是surfaceview可以满足情况,如果是surfeceview,在进行显示隐藏时可能在mapview上出现surfaceview或者surfaceview上出现mapview
第一,如果mapview对应的fragment先于surfaceview对应的fragment初始化,则只需要在初始化surfaceview对应的fragment时,进行setZOrderOnTop(true),在隐藏时,将surfaceview及其fragment都隐藏即可。(mapview其内部原理是surfaceview,而surfaceview在布局中是无法改变其上下层顺序的)
第二,如果mapview对应的fragment后于surfaceview对应的fragment初始化,本人暂时没有在其方法上找到类似setZOrderOnTop(true)方法,暂时没法解决。最后采用折中方式用切换时的白屏效果替换了黑屏效果
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(R.id.mapcontent, new Fragment(), "fragment");