1

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

这只发生在一种情况下,那就是当我关闭并再次打开屏幕时。当我在暂停后滑回地图视图片段时,onCreateView 行为正常。由于我正在开发基于位置的游戏,因此屏幕需要经常关闭。

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

我有一个 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;
}
4

1 回答 1

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。

于 2012-07-07T22:53:43.280 回答