Android Google map v2 in the tab Problem overlap, Multiple maps in the tab

I am new to android, now I work with Google maps v2, I used tabhost to show Google map v2. In this tabhost, I need to show two google maps v2 on different tabs. When I switch the b / w tab to two tabs containing a map, it overlaps. I do not know to solve this problem.

// code here for both tabs

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

Does anyone have a solution please help me

Thanks in advance.

+4
source share
3 answers

I ran into the same problem, but finally I dealt with it that way.

First of all, I create a separate class MyMapFragment, which extends android.support.v4.app.Fragment

here the onCreateView method is used

 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; 

after that i create one xml file

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

You can add this layout file to the map location.

and finally you need to add a map view using this one in its activity class

 MyMapFragment newFragment = new MyMapFragment (1); FragmentTransaction transaction = getActivity() .getSupportFragmentManager().beginTransaction(); transaction.add(R.id.my_fragmentView, newFragment); transaction.commit(); 

It works great on my side, hope this helps you.

MapFragment Code here

 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 } } 
+5
source

I had the same problem (google maps v2 only displayed a gray section on the tab, but if I load it as the main action without tabs, how does it work).

Then I added mMapFragment.onResume () , and now it works on a tab! Try the following:

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

I found a solution here: fooobar.com/questions/797170 / ...

0
source

Just use this class .......

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

Source: https://habr.com/ru/post/1482903/


All Articles