SupportMapFragment - 无法从Fragment转换为MapFragment

时间:2013-04-14 20:45:11

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

尝试在我正在构建的活动中组合一个小MapFragment,但是在完成所有工作时遇到了一些麻烦。我知道Maps api和Play服务都安装正确,因为我做了测试教程,一切正常。

在文档here之后,我遇到了以下问题:在我的setUpMapIfNeeded方法中,我可以使用getFragmentManager()getSupportFragmentManager()。当我使用getFragmentManager()时,Eclipse很酷,但是当我运行时,我得到NoSuchMethodError说该方法未定义。当我选择getSupportFragmentManager()时,Eclipse不喜欢它并且给我错误“无法从Fragment转换为MapFragment”。那是什么交易?有什么建议吗?

private void setUpMapIfNeeded() {
    //Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        if (mMap != null) {
            //do things to the map
            mMap.addMarker(new MarkerOptions().position(LOCATION).title(EXTRA_URL));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LOCATION,15));
            mMap.getUiSettings().setZoomControlsEnabled(false);
        }
    }
}

如果我能提供任何其他代码,请告诉我,我很乐意快速发布。

4 个答案:

答案 0 :(得分:79)

  

我可以使用getFragmentManager()或getSupportFragmentManager()。

这里不应该有争论。如果您可以使用getSupportFragmentManager(),那么您正在使用Android支持包的片段backport,这是您必须使用的方法。

  

当我选择getSupportFragmentManager()时,Eclipse不喜欢它并且给我错误“无法从Fragment转换为MapFragment”。

那是因为你不应该使用MapFragment。您正在使用Android Support包的片段backport,因此您必须使用SupportMapFragment

答案 1 :(得分:0)

这是我必须做的,因为我在11级工作;

    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.SupportMapFragment;
    import android.support.v4.app.FragmentActivity;

    public class MapaActivity extends FragmentActivity {

    private GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mapa);

        map =  ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap();
    }
}

答案 2 :(得分:0)

嘿,只需将v4 jar添加到libs文件夹并添加到build 然后在你的片段页面中导入

import android.support.v4.app.FragmentActivity;

您可以扩展FragmentActivity

公共类MainActivity extends FragmentActivity实现了LocationListener {

}

并且它还访问getSupportFragmentManager();

SupportMapFragment fm =(SupportMapFragment)getSupportFragmentManager()。findFragmentById(R.id.map);

答案 3 :(得分:0)

将您的依赖项更改为:

implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'