我遇到了同样的问题,但最后我以这种方式解决了它。
首先,我创建了单独的 MyMapFragment 类,它扩展了 android.support.v4.app.Fragment
这是 onCreateView 方法
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
}
try {
view = (ViewGroup) inflater.inflate(R.layout.map_frag, container,
false);
setUpMapIfNeeded();
showMap(maptype);
} catch (Exception e) {
}
return view;
之后我创建了一个 xml 文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_fragmentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
您可以将此布局文件添加到您的地图布局位置
最后你必须在你的活动类中使用这个添加地图视图
MyMapFragment newFragment = new MyMapFragment (1);
FragmentTransaction transaction = getActivity()
.getSupportFragmentManager().beginTransaction();
transaction.add(R.id.my_fragmentView, newFragment);
transaction.commit();
它在我身边工作得很好,我希望它可以帮助你。
MapFragment 代码在这里
public class MapFragment extends Fragment {
private View view;
private GoogleMap mMapView;
public TouchableWrapper mTouchView;
LinearLayout map_fragg;
String userLat, userLon;
int maptype = 1;
Marker lastMarker = null;
public MapFragment() {
}
public MapFragment(int maptype) {
this.maptype = maptype;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
getView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
if (mTouchView != null) {
mTouchView.removeAllViews();
}
}
try {
mTouchView = new TouchableWrapper(getActivity());
view = (ViewGroup) inflater.inflate(R.layout.map_frag, null, false);
view.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
map_fragg = (LinearLayout) view.findViewById(R.id.map_fragg);
mTouchView.addView(view);
setUpMapIfNeeded();
} catch (Exception e) {
e.printStackTrace();
}
return mTouchView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private void showMap(int maptype) {
switch (maptype) {
case 1:
setMapX();
break;
case 2:
setMapXX();
break;
case 3:
setUpMapXXX();
break;
default:
break;
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the
// map.
if (mMapView == null) {
// Try to obtain the map from the SupportMapFragment.
mMapView = ((SupportMapFragment) getActivity()
.getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMapView != null) {
setUpMap();
showMap(maptype);
}
}
}
private void setUpMap() {
mMapView.setMyLocationEnabled(true);
}
// Setting up map for MyProfile Page
private void setMapX() {
// Your Code for adding Markers
}
// Setting up map for MyProfile Page
private void setMapXX() {
// Your Code for adding markers
}
public class TouchableWrapper extends FrameLayout {
public TouchableWrapper(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.dispatchTouchEvent(ev);
}
}
@Override
public void onStop() {
super.onStop();
try {
SupportMapFragment f = (SupportMapFragment) getFragmentManager()
.findFragmentById(R.id.map);
if (f != null)
getFragmentManager().beginTransaction().remove(f).commit();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public View getView() {
if (view != null) {
return view;
}
return super.getView();
}
private void setUpMapXXX() {
// Your Code for adding Markers
}
}