我是android新手,现在正在使用Google maps v2,我使用tabhost来显示Google map v2,在这个tabhost中我需要在不同的标签上显示两个Google maps v2。当我切换标签b / w两个包含地图的标签时,它会重叠。我不知道要克服这个问题。
//这两个标签的代码都在这里
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMyLocationEnabled(true);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
Log.e("locamanager",""+locationManager);
Criteria criteria=new Criteria(); // object to retrieve provider
String provider = locationManager.getBestProvider(criteria, true);
Location location=locationManager.getLastKnownLocation(provider);
if(location!=null){
onLocationChanged(location);
}
locationManager.requestLocationUpdates(provider, 400, 1000, this);
}
@Override
public void onLocationChanged(Location location) {
latLng = new LatLng(location.getLatitude(), location.getLongitude());
Log.e("latlng",""+latLng);
cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 15);
mMap.animateCamera(cameraUpdate);
locationManager.removeUpdates(this);
new ReverseGeocodingTask(getBaseContext()).execute(latLng);
}
任何人都有解决方案请帮帮我
感谢Advance
答案 0 :(得分:5)
我遇到了同样的问题,但最后我以这种方式管理了它。
首先,我创建单独的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 Code就在这里
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
}
}
答案 1 :(得分:0)
我遇到了同样的问题(谷歌地图v2在选项卡中只显示了一个灰色网格,但是如果我将它作为主要活动加载而没有标签而不是它的工作原理。)
然后我添加了 mMapFragment.onResume(),现在它在标签中工作了!试试这个:
mMapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map));
mMapFragment.onResume(); // needed to get the map to display immediately
我在这里找到了解决方案:https://stackoverflow.com/a/16960527/185493
答案 2 :(得分:0)
只需使用此课程.......
public class MapFragment extends SupportMapFragment {
GoogleMap mapView;
private Context context;
@Override
public void onCreate(Bundle arg0) {
super.onCreate(arg0);
}
@Override
public View onCreateView(LayoutInflater mInflater, ViewGroup arg1,
Bundle arg2) {
View view = super.onCreateView(mInflater, arg1, arg2);
setMapTransparent((ViewGroup) view);
return view;
}
private void setMapTransparent(ViewGroup group) {
int childCount = group.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = group.getChildAt(i);
if (child instanceof ViewGroup) {
setMapTransparent((ViewGroup) child);
} else if (child instanceof SurfaceView) {
child.setBackgroundColor(0x00000000);
}
}
}
@Override
public void onInflate(Activity arg0, AttributeSet arg1, Bundle arg2) {
super.onInflate(arg0, arg1, arg2);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
context = getActivity();
mapView = getMap();
}
}