17

重複の可能性:
SupportMapFragmentを使用するときに、マップを使用する準備ができていることをどのように確認できますか?

現在、新しいMaps API V2をテストしていますが、正しく機能させるのに本当に問題があります。

私の問題は、getMap()が常にnullを返すことです。

私は3つの異なるポイントで通話をテストしました:

  1. onCreate()
  2. onResume()
  3. マップがすでに画面に表示されてから数秒後に呼び出されるハンドラー内

コードは次のとおりです。

public class MapActivity extends FragmentActivity {

private SupportMapFragment mMapFragment;

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
            setupMap();
}

@Override
protected void onResume() {
    super.onResume();
    setupMap();
    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            setupMap();
        }
    }, 5000);
}

private void setupMap() {
    if (getSupportFragmentManager().findFragmentById(R.id.fragment) == null) {
    mMapFragment = CustomMapFragment.newInstance();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.map_wrapper, mMapFragment).commit();
    }
    GoogleMap map = mMapFragment.getMap();
    if (map != null) {
        mMapFragment.getMap().getUiSettings().setZoomControlsEnabled(true);
        mMapFragment.getMap().getUiSettings().setZoomGesturesEnabled(true);
        mMapFragment.getMap().setMyLocationEnabled(true);
    }
}

私が間違っていることはありますか?

4

1 に答える 1

47

CommonsWareがリンクされた質問で述べたように、問題はSupportMapFragmentプログラムで作成する場合にのみ発生し、<fragment>XMLタグは発生しません。

プログラムで作成された場合、マップはonActivityCreated()通話で利用可能になります。したがって、私の回避策は次のとおりです。

mMapFragment = new SupportMapFragment() {
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                GoogleMap map = mMapFragment.getMap();
                if (map != null) {
                    //Your initialization code goes here
                }
            }
        };
于 2012-12-28T16:11:45.823 に答える