Google map inside another fragment - Function like

2019-06-14 09:01发布

问题:

My previous question Google map inside another fragment - Error when calling getMapAsync was answered. The google map is showing and the getMapAsync is now working.

And I'm now finding the solution to the other functions like

public void onLocationChanged(Location location) {...}

public void onConnected(Bundle bundle) {...}

Note: I'm trying to convert a google map activity to work inside a fragment that will be called in NavigationView.

samplemapFragment.java

package  com.sample.samplemap;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;

public class samplemapFragment extends Fragment implements OnMapReadyCallback {
    GoogleMap mGoogleMap;
    SupportMapFragment mFragment;

    MapView mapView;

    View mView;

    public samplemapFragment() {
        Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MapsInitializer.initialize(getContext());
    }

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

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mapView = (MapView) mView.findViewById(R.id.map);

        if (mapView != null) {
            // Initialise the MapView
            mapView.onCreate(null);
            mapView.onResume();
            // Set the map ready callback to receive the GoogleMap object
            mapView.getMapAsync(this);
        }

    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        MapsInitializer.initialize(getContext());
        mGoogleMap = googleMap;
        mGoogleMap.setMyLocationEnabled(true);
    }
}

fragment_sample_map.xml

<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:context="com.sample.samplemap.samplemapFragment"
xmlns:tools="http://schemas.android.com/tools">
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="384dp"
    android:layout_height="300dp" android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_marginTop="44dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true" /> 
</RelativeLayout>

回答1:

OnLocationChanged is not a method tied to a GoogleMap, it is actually related to the LocationListener (or LocationClient) API. To get notifications for OnLocationChanged, you will have to register a 'Listener' which will poll the device's location and when it registers a change, will trigger the OnLocationChanged method.

You can find a comprehensive guide with examples here: http://developer.android.com/guide/topics/location/strategies.html

Good luck!