3

我正在尝试实现谷歌地图显示,下面是我的代码:

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();
        return root;
    }
}

我收到一个错误,即未定义类型 MapFragment 的 getSupportFragmentManager()。但是我有点困惑,因为我已经导入了 com.google.android.gms.maps.SupportMapFragment。这种方法不应该来自那里吗?我是否错过了让这种方法发挥作用的一些步骤?

4

2 回答 2

6

如果您正在使用这个SherlockMapFragment,请尝试:

getSherlockActivity().getSupportFragmentManager();
于 2013-01-26T17:59:14.297 回答
0

伙计,我花了几个小时阅读这个问题和你的其他两个问题(以及其他问题),因为我遇到了完全相同的问题。我有一个运行 ABS+GMapsV2.0+FragmentActivity 的应用程序,但是因为我听说很多将它全部放在片段中是一个好习惯,我开始将它移植到片段和 FragmentActivity 作为容器。

当我移植地图时,发生的情况完全相同,getSupportFragmentManager() 无法识别,而且我不太喜欢创建 SherlockMapFragment 破坏 ABS 库的建议解决方案,所以我一直在挖掘。

很可能您此时已经知道,但我刚刚意识到您(以及 10 分钟前的我)正在尝试处理在 xml 中定义但尚未创建(索引)的片段。

查看检查片段方法中调用顺序的文档,我在 onCreateView() 之后尝试了其他方法中的代码...并更改 getSupportFragmentManager() 为 getFragmentManager() 甚至遵循使用 getSherlockActivity().getSupportFragmentManager( ) 我可以处理那些已经存在的片段。

public class MapsFragment extends SherlockFragment {


private SupportMapFragment mSupportMapFragment;
private GoogleMap map;
private Marker spotAMarker;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.maps_fragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    mSupportMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_fragment_test); //THIS ONE
    mSupportMapFragment = (SupportMapFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.map_fragment_test); //OR THIS ONE
    if(mSupportMapFragment != null) {
        map = mSupportMapFragment.getMap(); 

        if(map != null) {

            spotAMarker = map.addMarker(new MarkerOptions().position(new LatLng(4.651904,-74.057352)).
                    title(getString(R.string.spot_a_title)).snippet(getString(R.string.spot_a_subtitle)).
                    icon(BitmapDescriptorFactory.fromAsset("images/spot_a.png")));
            spotAMarker.setDraggable(true);

        } else {
            Toast.makeText(this.getActivity(), getString(R.string.no_map_error), Toast.LENGTH_LONG).show();
        }

    } else {
        Toast.makeText(this.getActivity(), "No Map Fragment", Toast.LENGTH_LONG).show();
    }
    super.onActivityCreated(savedInstanceState);
}
}

可能您已经有了解决该问题的方法,但我想与其他陷入同一问题的人分享我的经验。

于 2013-07-23T07:08:51.850 回答