web-dev-qa-db-fra.com

Erreur lors de l'ouverture de SupportMapFragment pour la deuxième fois

Lorsque j'ouvre mon SupportMapFragment (Android maps v2) pour la deuxième fois (en appelant setContentView), j'obtiens l'erreur suivante:

01-28 16:27:21.374: E/AndroidRuntime(32743): FATAL EXCEPTION: main
01-28 16:27:21.374: E/AndroidRuntime(32743): Android.view.InflateException: Binary XML file line #6: Error inflating class fragment
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:704)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.View.inflate(View.Java:16119)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at mypackage.MyView.<init>(HitsView.Java:26)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at mypackage.MenuListFragment.onItemClick(MenuListFragment.Java:133)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.widget.AdapterView.performItemClick(AdapterView.Java:298)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.widget.AbsListView.performItemClick(AbsListView.Java:1086)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.widget.AbsListView$PerformClick.run(AbsListView.Java:2855)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.widget.AbsListView$1.run(AbsListView.Java:3529)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.os.Handler.handleCallback(Handler.Java:615)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.os.Handler.dispatchMessage(Handler.Java:92)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.os.Looper.loop(Looper.Java:137)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.app.ActivityThread.main(ActivityThread.Java:4745)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Java.lang.reflect.Method.invokeNative(Native Method)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Java.lang.reflect.Method.invoke(Method.Java:511)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:786)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at dalvik.system.NativeStart.main(Native Method)
01-28 16:27:21.374: E/AndroidRuntime(32743): Caused by: Java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f04003b, tag null, or parent id 0x0 with another fragment for com.google.Android.gms.maps.SupportMapFragment
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.Java:285)
01-28 16:27:21.374: E/AndroidRuntime(32743):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:676)
01-28 16:27:21.374: E/AndroidRuntime(32743):    ... 20 more

Le fichier XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:map="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >
    <fragment
        Android:id="@+id/hits_map"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        class="com.google.Android.gms.maps.SupportMapFragment"
        map:mapType="normal"
        map:uiZoomControls="false"
        map:uiZoomGestures="true"
        map:cameraZoom="13"
        map:uiRotateGestures="true"
        map:uiTiltGestures="true"/>
</RelativeLayout>

MyView.class:

public class MyView extends RelativeLayout {
    private GoogleMap map;

    public MyView(Context context, FragmentActivity activity) {
        super(context);
        inflate(activity, R.layout.activity_hits, this);
        this.map = ((SupportMapFragment) activity.getSupportFragmentManager()
            .findFragmentById(R.id.hits_map)).getMap();
    }
}

Je n'ai aucune idée de ce que signifie cette erreur. Quelqu'un peut-il expliquer cela?

54
Klaasvaak

Au lieu de déclarer de SupportMapFragment dans la mise en page, faites-le par programme et assurez-vous d'utiliser getChildFragmentMananger au lieu du getFragmentManager () classique pour créer le fragment.

  mMapFragment = SupportMapFragment.newInstance();
    FragmentTransaction fragmentTransaction =
             mMapFragment.getChildFragmentManager().beginTransaction();
     fragmentTransaction.add(R.id.map_root, mMapFragment);
     fragmentTransaction.commit(); 

Conservez ce SupportMapFragment mMapFragment car vous en aurez besoin pour récupérer l'objet GoogleMap:

  GoogleMap map = mMapFragment.getMap();
51
juanmeanwhile

Mise à jour: Comme solution alternative (qui je pense est beaucoup mieux), vous pouvez utiliser un MapView qui est décrit: ici

J'ai rencontré un problème similaire en travaillant avec une implémentation d'onglets. Avec Google Maps V2, vous êtes coincé avec SupportMapFragment, donc l'utilisation de MapView n'est pas une option. Entre le post de juanmeanward et le commentaire # 1 trouvé ici ( https://code.google.com/p/gmaps-api-issues/issues/detail?id=5064#c1 ), j'ai réussi à comprendre ce que je faisais mal.

Donc, pour toute autre personne obtenant l'erreur d'ID en double, assurez-vous de déclarer le fragment par programme, pas en XML. Cela signifie probablement des dispositions d'imbrication.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
   Android:layout_width="match_parent"
   Android:layout_height="match_parent" >

<!-- Lots of fancy layout -->   

<RelativeLayout
        Android:id="@+id/map"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
    </RelativeLayout>
</RelativeLayout>

Ensuite, vous devez créer votre fragment par programme, mais cela doit être fait avec soin en tenant compte du cycle de vie des fragments ( http://developer.Android.com/reference/Android/app/Fragment.html#getChildFragmentManager () ). Pour vous assurer que tout est créé au bon moment, votre code devrait ressembler à ceci (extrait du commentaire # 1).

public class MyFragment extends Fragment {

private SupportMapFragment fragment;
private GoogleMap map;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.layout_with_map, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    FragmentManager fm = getChildFragmentManager();
    fragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
    if (fragment == null) {
        fragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.map, fragment).commit();
    }
}

@Override
public void onResume() {
    super.onResume();
    if (map == null) {
        map = fragment.getMap();
        map.addMarker(new MarkerOptions().position(new LatLng(0, 0)));
    }
}
}

J'espère que cela vous fera gagner du temps.

83
Kaleb

J'ai passé une demi-journée à résoudre ce problème et je n'ai trouvé qu'une solution de contournement. Remplacez votre méthode onCreate dans la classe YourFragment:

public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true); 
    super.onCreate(savedInstanceState);     
}

Et remplacez votre méthode onDestroy:

@Override
public void onDestroyView() {
    super.onDestroyView();
    try {
        SupportMapFragment fragment = (SupportMapFragment) getActivity()
                                          .getSupportFragmentManager().findFragmentById(
                                              R.id.multi_inns_on_map);
        if (fragment != null) getFragmentManager().beginTransaction().remove(fragment).commit();

    } catch (IllegalStateException e) {
        //handle this situation because you are necessary will get 
        //an exception here :-(
    }
}
24
Jaroslav

J'avais passé toute cette journée à chercher la solution à ce problème, en lisant tout le travail ici, et j'ai trouvé ce moyen de résoudre les problèmes. Je posterai tout le code, car cette question n'a pas de réponse complète, juste un petit extrait qui correspond à un scénario complet et qui aide n'importe qui.

public class LocationFragment extends Fragment implements View.OnClickListener {

    private GoogleMap googleMap;
    private static View rootView;
    private SupportMapFragment supportMapFragment;

    public LocationFragment() {
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setRetainInstance(true);
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if(savedInstanceState == null) {

            if (rootView != null) {
                ViewGroup parent = (ViewGroup) rootView.getParent();
                if (parent != null)
                    parent.removeView(rootView);
            }

            try{
                if(rootView == null)
                {
                    rootView = inflater.inflate(R.layout.fragment_location, container, false);
                }

                supportMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
                LocationUtility locationUtility = LocationUtility.getInstance(context);
                GoogleMap googleMap =  locationUtility.initilizeMap(supportMapFragment);

              //More code

            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }

        return rootView;
    }

}

En déboguant cela, vous remarquerez que le fonctionnement du fragment n'a pas d'importance, vous n'avez pas besoin de botter pour onDestroyMethod, etc., car la validation de null fonctionne uniquement avec l'instance actuelle de l'objet.

Prendre plaisir! ;)

2
Sterling Diaz

Après beaucoup de succès et d'essais, j'ai finalement réussi à utiliser parfaitement MapView Fragment dans mon application et le résultat ressemble à ceci: -

enter image description here

, voici ma classe de fragments MapView: -

import Android.content.Context;
import Android.location.Location;
import Android.location.LocationListener;
import Android.location.LocationManager;
import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.util.Log;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.Toast;

import com.google.Android.gms.maps.CameraUpdateFactory;
import com.google.Android.gms.maps.GoogleMap;
import com.google.Android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.Android.gms.maps.MapFragment;
import com.google.Android.gms.maps.model.BitmapDescriptorFactory;
import com.google.Android.gms.maps.model.CameraPosition;
import com.google.Android.gms.maps.model.LatLng;
import com.google.Android.gms.maps.model.MarkerOptions;
import com.serveroverload.yago.R;


public class HomeFragment extends Fragment implements LocationListener {
    // Class to do operations on the Map
    GoogleMap googleMap;
    private LocationManager locationManager;

    public static Fragment newInstance() {
        return new HomeFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.home_fragment, container, false);
        Bundle bdl = getArguments();

        // setuping locatiomanager to perfrom location related operations
        locationManager = (LocationManager) getActivity().getSystemService(
                Context.LOCATION_SERVICE);

        // Requesting locationmanager for location updates
        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 1, 1, this);

        // To get map from MapFragment from layout
        googleMap = ((MapFragment) getActivity().getFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        // To change the map type to Satellite
        // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

        // To show our current location in the map with dot
        // googleMap.setMyLocationEnabled(true);

        // To listen action whenever we click on the map
        googleMap.setOnMapClickListener(new OnMapClickListener() {

            @Override
            public void onMapClick(LatLng latLng) {
                /*
                 * LatLng:Class will give us selected position lattigude and
                 * longitude values
                 */
                Toast.makeText(getActivity(), latLng.toString(),
                        Toast.LENGTH_LONG).show();
            }
        });

        changeMapMode(3);

        // googleMap.setSatellite(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.setMyLocationEnabled(true);

        return v;
    }

    private void doZoom() {
        if (googleMap != null) {
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                    new LatLng(18.520430, 73.856744), 17));
        }
    }

    private void changeMapMode(int mapMode) {

        if (googleMap != null) {
            switch (mapMode) {
            case 0:
                googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);
                break;

            case 1:
                googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                break;

            case 2:
                googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                break;

            case 3:
                googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                break;

            case 4:
                googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                break;

            default:
                break;
            }
        }
    }

    private void createMarker(double latitude, double longitude) {
        // double latitude = 17.385044;
        // double longitude = 78.486671;

        // lets place some 10 random markers
        for (int i = 0; i < 10; i++) {
            // random latitude and logitude
            double[] randomLocation = createRandLocation(latitude, longitude);

            // Adding a marker
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(randomLocation[0], randomLocation[1])).title(
                    "Hello Maps " + i);

            Log.e("Random", "> " + randomLocation[0] + ", " + randomLocation[1]);

            // changing marker color
            if (i == 0)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_Azure));
            if (i == 1)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
            if (i == 2)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
            if (i == 3)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            if (i == 4)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_Magenta));
            if (i == 5)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
            if (i == 6)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED));
            if (i == 7)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
            if (i == 8)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_Violet));
            if (i == 9)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));

            googleMap.addMarker(marker);

            // Move the camera to last position with a zoom level
            if (i == 9) {
                CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(new LatLng(randomLocation[0], randomLocation[1]))
                        .zoom(15).build();

                googleMap.animateCamera(CameraUpdateFactory
                        .newCameraPosition(cameraPosition));
            }
        }

    }

    /*
     * creating random postion around a location for testing purpose only
     */
    private double[] createRandLocation(double latitude, double longitude) {

        return new double[] { latitude + ((Math.random() - 0.5) / 500),
                longitude + ((Math.random() - 0.5) / 500),
                150 + ((Math.random() - 0.5) * 10) };
    }

    @Override
    public void onLocationChanged(Location location) {

        if (null != googleMap) {
            // To get lattitude value from location object
            double latti = location.getLatitude();
            // To get longitude value from location object
            double longi = location.getLongitude();

            // To hold lattitude and longitude values
            LatLng position = new LatLng(latti, longi);

            createMarker(latti, longi);

            // Creating object to pass our current location to the map
            MarkerOptions markerOptions = new MarkerOptions();
            // To store current location in the markeroptions object
            markerOptions.position(position);

            // Zooming to our current location with zoom level 17.0f
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position,
                    17f));

            // adding markeroptions class object to the map to show our current
            // location in the map with help of default marker
            googleMap.addMarker(markerOptions);
        }

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub
        super.onDestroyView();

        locationManager.removeUpdates(this);

        Android.app.Fragment fragment = getActivity().getFragmentManager()
                .findFragmentById(R.id.map);
        if (null != fragment) {
            Android.app.FragmentTransaction ft = getActivity()
                    .getFragmentManager().beginTransaction();
            ft.remove(fragment);
            ft.commit();
        }
    }


}

Mon fichier Xml ressemble à ceci: -

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/map"
    Android:name="com.google.Android.gms.maps.MapFragment"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

La chose la plus importante à noter est que DO Not Mix app.Fragment avec v4.Fragments else app plantera mal.

Comme vous pouvez le voir, j'ai utilisé app.Fragment pour attacher et supprimer mon fragment MapView

J'espère que cela aidera quelqu'un

1
Hitesh Sahu

J'ai essayé diverses solutions proposées ici, et la meilleure IMHO est MapView. Quoi qu'il en soit, j'ai trouvé une autre solution qui pourrait répondre à vos besoins (ou peut-être pas).

J'ai eu mon SupportMapFragment dans un ViewPager+FragmentPagerAdapter avec 3 onglets. J'ai donc simplement configuré le ViewPager de manière à ce qu'il ne détruise jamais l'onglet où se trouve SupportMapFragment.

viewPager.setOffScreenPageLimit(2);
viewPager.setAdapter(...);

Avec cet appel, le ViewPager conservera toujours deux pages après et deux pages avant celle en cours, donc aucun de mes trois onglets n'est jamais détruit/recréé.

Problème résolu :)

Notez que la consommation de mémoire augmentera

1
voghDev

J'ai rencontré ce problème et j'ai trouvé dans mes Android journaux que mon accélération matérielle n'était pas activée. Après l'avoir activée dans mon AndroidManifest, j'affichais les cartes plusieurs fois n'était plus un problème. J'utilisais un émulateur x86.

1
user2771209

essayez ce code

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
         Finder = new LocationFinder(getActivity());

             view = inflater.inflate(R.layout.fragment_secondfragement, container, false);



                        initMap();

        
      //  getLocation();
        return view;

    }


    public void initMap(){

        if (map == null) {
            mapFragment = (SupportMapFragment) getChildFragmentManager()
                    .findFragmentById(R.id.map);
        }

        map = mapFragment.getMap();
        map.setMyLocationEnabled(true);
        map.getUiSettings().setMyLocationButtonEnabled(true);

    }
0
Ameen Maheen

il suffit de mettre onCreateView

if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null)
            parent.removeView(view);
    }

view = inflater.inflate(R.layout.map, container, false);
0
Kastriot Dreshaj

J'ai la même problème et résolu en créant dynamiquement google map. Ce que vous avez à faire est de créer une classe qui s'étend SupportMapFragment class.

Cette méthode fonctionne sur Gingerbread to Lollipop et sur fragments imbriqués car elle créera la carte dynamiquement, donc ne vous inquiétez pas de supprimer le fragment ou quelque chose comme ça.

Étape 1:

public class DynamicMapFragment extends SupportMapFragment {

    public GoogleMap googleMap;
    public View mOriginalContentView;
    public static int statusGooglePlayService;    

    @Override
    public void onCreate(Bundle arg0) {
        super.onCreate(arg0);
    }

    @Override
    public View onCreateView(LayoutInflater mInflater, ViewGroup parent,
            Bundle arg2) {

        mOriginalContentView = super.onCreateView(mInflater, parent, arg2);

       //this is for getting height of the phone screen
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay()
                .getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;

        //Here you can define the height of the map as you desire
        FrameLayout.LayoutParams parentLayout = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.MATCH_PARENT, height / 3);

        mOriginalContentView.setLayoutParams(parentLayout);
        return mOriginalContentView;
    }

    @Override
    public View getView() {
        return mOriginalContentView;
    }

    @Override
    public void onInflate(Activity arg0, AttributeSet arg1, Bundle arg2) {
        super.onInflate(arg0, arg1, arg2);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        googleMap = getMap();

        statusGooglePlayService = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getActivity());
        if (statusGooglePlayService == ConnectionResult.SUCCESS) {
            if (googleMap != null) {
                // do whatever you want to do with map
            }
        } else {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
                    statusGooglePlayService, getActivity(), -1);
            dialog.show();
        }
    }

}

Appelez ensuite la classe créée ci-dessus depuis Activity, Fragment comme ceci:

Étape 2:

//Calling the method from a fragment
private void createMap(View rootView) {
        FrameLayout mapLayout = (FrameLayout)rootView.findViewById(R.id.location_map);
        FragmentTransaction mTransaction = getActivity()
                .getSupportFragmentManager().beginTransaction();
        SupportMapFragment mFRaFragment = new DynamicMapFragment();
        mTransaction.add(mapLayout.getId(), mFRaFragment);
        mTransaction.commit();

        try {
            MapsInitializer.initialize(activity);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Disposition XML pour le fragment où vous devez ajouter Framelayout au lieu d'un fragment pour map

Étape3:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >



    <FrameLayout
        Android:id="@+id/location_map"
        Android:layout_width="match_parent"
        Android:layout_height="250dp"
        Android:layout_weight="0" />

      <!--  You can add any other view also whatever you want to add 

      <Button
        Android:layout_width="match_parent"
        Android:layout_height=""wrap_content""
        Android:layout_weight="0" />    -->

</LinearLayout>
0
Pankaj
private MainActivity mainActObj;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mainActObj = getMainActivity();
}

@SuppressWarnings("unchecked")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (mainActObj.mapView == null) {
        return mainActObj.mapView = inflater.inflate(R.layout.fragment_map,
                null);
    }

    else {
        ViewGroup parent = (ViewGroup) mainActObj.mapView.getParent();
        if (parent != null) {
            parent.removeView(mainActObj.mapView);
        }

        try {
            return mainActObj.mapView = inflater.inflate(
                    R.layout.fragment_map, container, false);
        } catch (InflateException except) {
            return mainActObj.mapView;
        }
    }

}
0
Teimoor Alam Khan