SupportMapFragment或GoogleMap为空

时间:2013-01-26 18:08:08

标签: android android-maps-v2 supportmapfragment

管理以使代码无错误,但是在启动时,我总是在mMap = mapFrag.getMap();

行处获得空指针异常

为什么会这样?我错过了一些进口或一些步骤吗?我不确定是否是引起问题的SupportMapFragment或GoogleMap对象。

package com.fragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MapFragment extends SherlockMapFragment {

    private GoogleMap mMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = super.onCreateView(inflater, container, savedInstanceState);
        SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map);
        mMap = mapFrag.getMap(); //null pointer is here
        return root;
    }
}

修改:这是基于此问题中提供的解决方案的实施的一部分here

2 个答案:

答案 0 :(得分:2)

请注意,您无需使用自定义Fragment子类来使用Maps V2。如果您的片段只是一张地图,您可以从活动中创建MapFragmentSupportMapFragment并在那里进行配置。

您甚至无需创建某种SherlockMapFragment即可将地图作为基于ActionBarSherlock的应用程序的一部分。常规的SupportMapFragment工作正常。

如果你想在你的片段中拥有更多的商业智慧,如果你正在使用ActionBarSherlock,,那么有问题的业务逻辑需要做与ActionBarSherlock相关的事情(例如,向操作栏提供操作项),然后然后才需要担心某种SherlockMapFragment

我可以确认this gist包含有效SherlockMapFragment。请注意,它会进入com.actionbarsherlock.app包,因为它需要对ActionBarSherlock的其余部分进行一些受包保护的访问。

然后您可以对其进行子类化,例如创建MyMapFragment

public class MyMapFragment extends SherlockMapFragment {
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if (getMap() != null) {
      Log.d(getClass().getSimpleName(), "Map ready for use!");
    }
  }
}

你必须对调用getMap()的时间有点小心 - 太快它会返回nullonActivityCreated()似乎是一个相当安全的时间,尽管您可以自由尝试。

然后,您只需使用MyMapFragment,只要您使用SupportMapFragment

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.commonsware.android.mapsv2.sherlock.MyMapFragment"/>

Here is the complete project包含上述代码。

答案 1 :(得分:0)

无需实现额外的类,如SherlockMapFragment。您可以处理Fragment或SherlockFragment类代码中的SupportMapFragment。请看this