简体   繁体   中英

Instantiate Google Map Fragment in another activity

I have main activity and one fragment. In that fragment, I have used Google Map. I want to know, how to pass instance of map fragment to main activity with java. Because I want to manipulate that map into main activity.

I have this class in main activity

public static class HomeFragment extends Fragment {

    private static View view;

    public HomeFragment() {
    }

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

        if(view != null)
        {
            ViewGroup parent = (ViewGroup) view.getParent();
            if(parent != null)
            {
                parent.removeView(view);
            }
        }
        try
        {
            view = inflater.inflate(R.layout.fragment_home, container, false);
        }
        catch(InflateException e){
            // map is already there, just return view as it is
        }
        return view;
    }

}

fragment_home.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
tools:context="com.gaurav.googlemap.HomeMap" >

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" >
</fragment>

</RelativeLayout>

I want to instantiate map below this line in main activity,

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

Thanks.

You can add any method say

  public void getFragment(Fragment fragment){

}

in the MainActivty and in the fragment

you can call this method by using the following code...

  ((MainActivity)getActivity()).getFragment(this);

I hope it will help you.....

fyi, https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2

yourmap.xml

<FrameLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="2dp"
    >
    <com.google.android.gms.maps.MapView
         android:id="@+id/mapview"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
    />
</FrameLayout>

youractivity.class

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Log.i(TAG, "oncreate");
    View rootView = inflater.inflate(R.layout.yourmap, container, false);

     // Gets the MapView from the XML layout and creates it
    mapView = (MapView) rootView.findViewById(R.id.mapview);
    mapView.onCreate(savedInstanceState);
    setCurrentLocationMarker();

    return rootView;
}

public void setCurrentLocationMarker(){
    try {
    // Gets to GoogleMap from the MapView and does initialization stuff
        map = mapView.getMap();
        map.getUiSettings().setMyLocationButtonEnabled(false);
        map.setMyLocationEnabled(true);

        // Needs to call MapsInitializer before doing any CameraUpdateFactory calls
        try {
            MapsInitializer.initialize(getActivity());
        } catch (Exception e) {
            Log.e(TAG , "Exception: "+e.getMessage());
            e.printStackTrace();
        }

        gps = new GPSTracker(getActivity());

        if(gps.canGetLocation()) {

            myLatitude = gps.getLatitude();
            myLongitude = gps.getLongitude();

            if(myLatitude==0 && myLongitude==0){
                LocationManager lm = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
                Location location = getLastKnownLocation(lm);
                Log.i(TAG, "location : "+location);
                if(location!=null){
                     myLatitude = location.getLatitude();
                     myLongitude = location.getLongitude();
                }
            }

        } else {
            // Can't get location.
            // GPS or network is not enabled.
            // Ask user to enable GPS/network in settings.
            gps.showSettingsAlert();
            Log.i(TAG, "gps.canGetLocation() : "+gps.canGetLocation());
            return;
        }

        Log.i(TAG, "myLatitude  :"+myLatitude+", myLongitude: "+myLongitude);


        // Updates the location and zoom of the MapView
        if(myLatitude>0 && myLongitude>0){
            CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(myLatitude, myLongitude), 10);
            map.animateCamera(cameraUpdate);

            MarkerInfo markerinfo = new MarkerInfo("", "Current Location", myLatitude, myLongitude, true);
            addMarker(markerinfo);
        }


        map.setOnMarkerClickListener(onClickListener);
        map.setOnInfoWindowClickListener(onInfoWindowClickListener);            
        marker.showInfoWindow();

    } catch (Exception e) {
       Log.e(TAG, "Exception : "+e.getMessage());
    }
}
mapView = (MapFragment) ((Activity)mContext).getFragmentManager().findFragmentById(R.id.map_view);

这对我有用

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM