无法解析getMap()或用getMapAsync()

时间:2017-04-17 18:21:46

标签: android google-maps-android-api-2

我是Android编程的新手,并且一直在努力解决这个问题。我读到getMap()已被弃用并被getMapAsync()取代 但是,我似乎无法找到使用getMayAsync()的方法,因为它使用片段资源,到目前为止我不需要片段资源。

这是我的代码:

public class RunMapFragment extends SupportMapFragment {
    private static final String ARG_RUN_ID = "RUN_ID";
    private GoogleMap mGoogleMap;
    public static RunMapFragment newInstance(long runId) {
        Bundle args = new Bundle();
        args.putLong(ARG_RUN_ID, runId);
        RunMapFragment rf = new RunMapFragment();
        rf.setArguments(args);
        return rf;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
                             Bundle savedInstanceState) {
        View v = super.onCreateView(inflater, parent, savedInstanceState);
        mGoogleMap = getMap(); //Error here
        mGoogleMap.setMyLocationEnabled(true);
        return v;
    }
}

非常感谢任何帮助。 是否可以将map API minimum sdk回滚到verison 9,在那里可以使用getMap()?

1 个答案:

答案 0 :(得分:1)

getMap()方法was deprecated and then removed,因此您需要改为使用getMapAsync()

当Fragment直接扩展SupportMapFragment时,无需覆盖onCreateView()

相反,只需从getMapAsync()覆盖中调用onResume(),然后使用onMapReady()覆盖中返回的Google地图参考:

public class RunMapFragment extends SupportMapFragment {
    private static final String ARG_RUN_ID = "RUN_ID";
    private GoogleMap mGoogleMap;
    public static RunMapFragment newInstance(long runId) {
        Bundle args = new Bundle();
        args.putLong(ARG_RUN_ID, runId);
        RunMapFragment rf = new RunMapFragment();
        rf.setArguments(args);
        return rf;
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mGoogleMap == null) {
            getMapAsync(this);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        mGoogleMap.setMyLocationEnabled(true);
    }
}

请注意,如果您的目标是api-23或更高版本,则需要确保用户在使用setMyLocationEnabled()方法之前已在运行时批准了位置权限,有关详细信息,请参阅my answer here