2017-06-15 3 views
1

Ich habe ein MapView in einem PagerFragment in Android eingerichtet. Ich folgte dem Google-Beispiel, aber mit V2-API, um eine Karte mit gruppierten Markern einzurichten, es zeigt mir eine schwarze Karte ohne Marker. Was habe ich falsch gemacht ?Marker-Clustering zeigt keine Markierungen in Android?

import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapView; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.maps.android.clustering.ClusterManager; 

import MapUtils.CustomMarkerItem; 

public class TabFragment2 extends Fragment implements OnMapReadyCallback { 

    MapView mMapView; 
    private GoogleMap googleMap; 

    private ClusterManager<CustomMarkerItem> mClusterManager; 

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

     View rootView = inflater.inflate(R.layout.tab_fragment_2, container, false); 

     mMapView = (MapView) rootView.findViewById(R.id.mapView); 
     mMapView.onCreate(savedInstanceState); 

     mMapView.getMapAsync(TabFragment2.this); 

     return rootView; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mMapView.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mMapView.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mMapView.onDestroy(); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     this.googleMap = googleMap; 
     if (ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     this.googleMap.setMyLocationEnabled(true); 


     setUpClusterer(); 
    } 

    private void setUpClusterer() { 
     // Position the map. 
     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10)); 

     // Initialize the manager with the context and the map. 
     // (Activity extends context, so we can pass 'this' in the constructor.) 
     mClusterManager = new ClusterManager<>(getContext(), googleMap); 
     googleMap.setOnMarkerClickListener(mClusterManager); 
     googleMap.setOnCameraIdleListener(mClusterManager); 
     // Add cluster items (markers) to the cluster manager. 
     addItems(); 
    } 

    private void addItems() { 

     // Set some lat/lng coordinates to start with. 
     double lat = 51.5145160; 
     double lng = -0.1270060; 


     // Set the title and snippet strings. 
     String title = "This is the title"; 
     String snippet = "and this would be it's explaination."; 

     // Add ten cluster items in close proximity, for purposes of this example. 
     for (int i = 0; i < 10; i++) { 
      double offset = i/60d; 
      lat = lat + offset; 
      lng = lng + offset; 
      CustomMarkerItem offsetItem = new CustomMarkerItem(lat, lng, title, snippet); 
      mClusterManager.addItem(offsetItem); 
     } 
    } 
} 

Antwort

1

Problem ist, dass Sie falsch Kontext Cluster-Instanz dh getContext() sind vorbei, die getActivity() sein sollte.

Verwenden getActivity() wenn Sie initialisieren die Instanz

mClusterManager = new ClusterManager<>(getActivity(), googleMap); 

und in grundsätzlich getActivity verwenden, wenn Sie Kontext in Fragmente Klasse

if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
0

@ David bitte diese Stackoverflow answer passieren. Es könnte Ihnen helfen, Marker hinzuzufügen. Oder Benutzer dieser Code für einzelne Marker (kann wie pro Ihre Anforderung verwenden)

`Marker marker=`mMap.addMarker(new MarkerOptions().position(latLng).title("Your Location")); 
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.YOUR_IMAGE));//to set any image as marker 
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));//for animate camera to your location 
    mMap.animateCamera(CameraUpdateFactory.zoomTo(15));//zoom camera to your location 

und alle Marker zu decken (wenn mehr als eine)

  LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
     builder.include(startLocation.getLatLng()); 
     builder.include(endLocation.getLatLng()); 
     LatLngBounds bounds = builder.build(); 
     int width = getResources().getDisplayMetrics().widthPixels; 
      int height = getResources().getDisplayMetrics().heightPixels; 
     mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, width, width, 20)); 
Verwandte Themen