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

Android Google Play服务-SupportMapFragment.getMap()始终返回null,android,android-maps,google-play-services,Android,Android Maps,Google Play Services,可能重复: 我目前正在测试新的MapsAPIv2,但我真的很难让它正常工作 我的问题是getMap()总是返回null 我已在3个不同点测试了该调用: onCreate() onResume() 在一个处理程序中,在映射在屏幕上已经可见几秒钟后调用该处理程序 代码如下: public class MapActivity extends FragmentActivity { private SupportMapFragment mMapFragment; @Override protecte

可能重复:

我目前正在测试新的MapsAPIv2,但我真的很难让它正常工作

我的问题是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);
        }
    }
    

    我做错了什么?

    正如链接问题中的Commonware所述,问题只在以编程方式创建
    SupportMapFragment
    而不是
    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
                    }
                }
            };
    

    很遗憾,我没有通过搜索功能找到这些问题:(我将发布我的示例解决方法作为答案。感谢Commonware!首先,您在什么类型的设备上运行此代码?物理设备或模拟器(可能没有安装播放服务)。不应创建非静态的内部片段,因为编译器将自动创建构造函数,为片段提供外部类作为参数。然后在片段重新创建时,您将获得
    实例化异常
    ,因为该片段没有默认的空构造函数。您如何做到这一点,但同时提供选项?通常我们使用SupportMapFragment.newInstance(选项)实例化;您不需要选项,因为您将获得作为闭包的变量(如果是最终变量),不幸的是,代码不可用请参见Alexandercomment@AlexanderMironov我想,但是我已经将
    mmapfracent
    设置为静态,但是仍然得到
    InstantiationException
    。有什么帮助吗?