Google Play服务 - SupportMapFragment.getMap()始终返回null

时间:2012-12-28 10:09:34

标签: android android-maps google-play-services

  

可能重复:
  How do I know the map is ready to get used when using the SupportMapFragment?

我目前正在测试新的Maps API V2,但我真的无法让它正常工作。

我的问题是getMap()总是返回null。

我已经在3个不同的点测试了这个电话:

  1. 的onCreate()
  2. 的onResume()
  3. 在地图已在屏幕上可见的几秒后调用的处理程序
  4. 以下是代码:

    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 个答案:

答案 0 :(得分:47)

正如CommonsWare在链接问题中所述,只有在以编程方式而不是SupportMapFragment XML标记创建<fragment>时才会出现此问题。

如果以编程方式创建,则地图将在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
                }
            }
        };