SupportMapFragment - 无法将Fragment转换为MapFragment

18

我正在构建一个活动,尝试在其中放置一个小的MapFragment,但是在使其正常工作方面遇到了一些问题。我知道Maps API和Play服务都已正确安装,因为我完成了测试教程并且一切正常。

按照这里的文档,我遇到了以下问题:在我的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);
        }
    }
}

如果您需要其他代码,我很乐意尽快发布。请告诉我。


你在R.id.map中有class属性吗? class="com.google.android.gms.maps.MapFragment" - Diogo Bento
4个回答

82
我可以使用getFragmentManager()或者getSupportFragmentManager()。
没有什么争论的余地,如果您可以使用getSupportFragmentManager(),那么您正在使用Android支持包中的片段后备,这是您必须使用的方法。
当我选择getSupportFragmentManager()时,Eclipse不喜欢它,并给出错误“无法从Fragment转换为MapFragment”。
那是因为您不应该使用MapFragment。您正在使用Android支持包中的片段后备,因此必须使用SupportMapFragment。

哎呀,现在感觉好傻。我明明知道,但显然没有将它们全部改为SupportMapFragment。我导入的是 MapFragment,而不是 SupportMapFragment。谢谢!问题已解决。 - user2163853
2
有时候愚蠢的错误能帮助别人(可能是新手)理解一个概念,所以永远不要感觉太傻瓜 ;) - marienke

1

我必须这样做,因为我是在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();
    }
}

0

嘿,只需将v4 jar添加到您的libs文件夹中并添加到构建中, 然后在您的Fragment页面中导入

import android.support.v4.app.FragmentActivity;

您可以扩展FragmentActivity

public class MainActivity extends FragmentActivity implements LocationListener{

}

同时它还访问了getSupportFragmentManager();

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


0

将您的依赖项更改为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接