Служба Google Play - SupportMapFragment.getMap() всегда возвращает null

Возможный дубликат:
Как узнать, что карта готова к использованию при использовании SupportMapFragment?

В настоящее время я тестирую новый API Карт V2, но у меня действительно возникают проблемы с его работой с коррекцией.

Моя проблема в том, что getMap() всегда возвращает null.

Я протестировал вызов в 3 разных точках:

  • OnCreate()
  • onResume()
  • в обработчике, который вызывается через несколько секунд после того, как карта уже видна на экране.

Вот код:

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

Что-нибудь, что я делаю неправильно?

Ответы

Ответ 1

Как сообщается 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
                }
            }
        };