屏幕打开时,获取片段以覆盖onCreateView

时间:2012-06-18 00:56:54

标签: android google-maps tabs android-fragments android-mapview

我的问题是我的MapFragment中没有调用onCreateView来重新实现/创建在onPause和onStop下删除的Fragment视图(一个MapView容器),因此为null。因此,由于地图视图为空,因此片段内容显示为黑色。

仅在一种情况下才会发生这种情况,即当我关闭屏幕并再次打开电源时。 onCreateView在暂停后刷回mapview片段时表现正常。由于我正在开发基于位置的游戏,因此屏幕需要经常关闭。

这里的任何帮助将不胜感激! =)

我有一个FragmentActivity,有三个选项卡,ViewPager,FragmentPagerAdapter,以及所有这些:

mapFragment = Fragment.instantiate(this, MapFragment.class.getName());
fragments.add(mapFragment);
fragments.add(Fragment.instantiate(this, NavHelperActivity.class.getName()));
fragments.add(Fragment.instantiate(this, CompassTabActivity.class.getName()));
mPagerAdapter  = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);

pager = (ViewPager)super.findViewById(R.id.viewpager);
pager.setAdapter(this.mPagerAdapter);

MapFragment 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; }

onPause必须删除地图视图:

if (mapViewContainer != null) {
mapViewContainer.setVisibility(View.GONE);
((ViewGroup) mapViewContainer.getParent()).removeView(mapViewContainer);
mapViewContainer = null;
}

1 个答案:

答案 0 :(得分:0)

编辑,更新,解决方案:

首先,不要显式地使用mapViewContainer。

设置类变量:

private static ViewGroup parent;

使用以下代码覆盖onStart:

@Override
public void onStart() {
     super.onStart();
     parent = mapViewContainer.getParent();
}

在onResume中,执行:

@Override
public void onResume() {
    super.onResume();

    if (mapViewContainer != null) {
        ((ViewGroup) parent).removeView(mapViewContainer);
        ((ViewGroup) parent).addView(mapViewContainer);
    }
}

其余代码应保持不变。

感谢casaflowa。