我在 Fragment 中的 MapView 解决方案主要基于 ChristophK、user1414726 和 inazaruk 在这篇 SO 帖子中提供的示例:mapview-in-a-fragment
在 Fragment 中调用 onPause() 时,会进行一些清理以避免 IllegalArgumentException。onPause 和 onStop 中的代码:
if (mapViewContainer != null) {
mapViewContainer.setVisibility(View.GONE);
((ViewGroup) mapViewContainer.getParent()).removeView(mapViewContainer);
mapViewContainer = null;
}
这在滑动到其他 Fragment 时调用 onPause 时效果很好,因为当 MapActivity 再次可见时,onCreateView(..) 在 Fragment 中被覆盖,其中 mapViewContainer 被重新实例化。
但是当我关闭屏幕时;当屏幕重新开机时,onCreateView(..) 不会被覆盖(onPaused 和 onResume 调用工作正常)。这会导致 MapView 显示为黑色,因为在 onPause 中的 removeView 调用中视图为空,直到在某些交互后再次调用 onCreateView(..)。
当屏幕重新启动时,如何强制 onCreateView 覆盖或以某种方式将 MapView 添加回 Fragment?
onCreateView(..) 中的代码:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// This is where you specify you activity class
Intent i = new Intent(getActivity(), MapTabActivity.class);
Window w = mLocalActivityManager.startActivity("tag", i);
mapViewContainer = w.getDecorView();
mapViewContainer.setVisibility(View.VISIBLE);
mapViewContainer.setFocusableInTouchMode(true);
((ViewGroup)
mapViewContainer).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
return mapViewContainer; }
干杯。