Служба 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
}
}
};