Android Google map v2 в закладке Проблема перекрытия, Несколько карт на вкладке

Я новичок в android, теперь я работаю с Google maps v2, я использовал tabhost для показа Google map v2. В этом tabhost мне нужно показать две карты Google 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);
}

У кого-нибудь есть решение, пожалуйста, помогите мне

Спасибо, заранее.

3 ответа

Я столкнулся с той же проблемой, но, наконец, я справился с ней таким образом.

Прежде всего, я создаю отдельный класс 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 файл

Вы можете добавить этот файл макета в место размещения карты

и, наконец, вам нужно добавить вид карты, используя этот в своем классе активности

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
 }
}


У меня была та же проблема (google maps v2 отображал только серое сечение на вкладке, но если я загружу его как основное действие без вкладок, чем он работает).

Затем я добавил mMapFragment.onResume(), и теперь он работает на вкладке! Попробуйте следующее:

mMapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map));
mMapFragment.onResume(); // needed to get the map to display immediately

Я нашел решение здесь: qaru.site/questions/797170/...


Просто используйте этот класс.......

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

licensed under cc by-sa 3.0 with attribution.