在另一个活动中实例化Google Map Fragment

时间:2015-02-18 02:39:05

标签: java android android-activity android-fragments google-maps-android-api-2

我有主要活动和一个片段。在那个片段中,我使用了谷歌地图。我想知道,如何使用java将地图片段的实例传递给主要活动。因为我想将该地图操纵为主要活动。

我在主要活动中有这个课程

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>

我想在主要活动

中实例化此行下方的地图
view = inflater.inflate(R.layout.fragment_home, container, false);

感谢。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

mapView = (MapFragment) ((Activity)mContext).getFragmentManager().findFragmentById(R.id.map_view);

这对我有用