1

私の問題は、onPause と onStop の下で削除されたフラグメント ビュー (MapView コンテナー) を再インスタンス化/作成するために、MapFragment で onCreateView が呼び出されないため、null になることです。したがって、マップ ビューが null であるため、フラグメント コンテンツは黒く表示されます。

これは 1 つの条件下でのみ発生し、それは画面の電源をオフにして再度オンにしたときです。onCreateView は、一時停止した後に mapview Fragment にスワイプすると正常に動作します。私はロケーションベースのゲームに取り組んでいるので、画面を頻繁にオフにする必要があります.

ここで何か助けていただければ幸いです。=)

ViewPager、FragmentPagerAdapter などの 3 つのタブを持つ FragmentActivity があります。

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 を明示的に null にしないでください。

クラス変数を設定します。

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 に答える