我正在尝试实施Google地图显示,下面是我的代码:
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;
}
}
我收到一个错误,getSupportFragmentManager()未定义类型MapFragment。但是我有点困惑,因为我导入了com.google.android.gms.maps.SupportMapFragment。那个方法不应该来自那里吗?我错过了让这种方法起作用的一些步骤吗?
答案 0 :(得分:6)
如果您使用此SherlockMapFragment,请尝试:
getSherlockActivity().getSupportFragmentManager();
答案 1 :(得分:0)
老兄,我花了几个小时阅读这个和其他两个问题(其中包括),因为我遇到了完全相同的问题。我有一个应用程序工作ABS + GMapsV2.0 + FragmentActivity,但是因为我听到很多将片段全部包含在片段中的好习惯,所以我开始将它作为容器移植到片段和FragmentActivities。
当我移植地图时,发生了完全相同的情况,getSupportFragmentManager()无法识别,我不太喜欢创建SherlockMapFragment弄乱ABS库的建议解决方案,所以我一直在挖掘。
你很可能已经知道了这一点,但我只是意识到你(以及我10分钟前)正在尝试处理一个在xml中定义但尚未创建(索引)的片段。
看一下documentation检查片段方法中调用的顺序,我在onCreateView()之后尝试了其他方法中的代码...并为getFragmentManager()更改了getSupportFragmentManager(),甚至按照给出的解决方案使用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);
}
}
可能你已经解决了这个问题的解决方法,但我想与其他陷入同样问题的人分享我的经验。