2016-06-22 13 views
0

Ich habe eine Anwendung, die eine zwei verschiedene Layouts in einer Recyclerview benötigt. Das habe ich schon gemacht. Das erste Layout ist für map.Ich verwende mapview dafür. Und die zweite ist die Liste der Orte.getMap() ist veraltet

Mein Problem ist die getMap(); ist veraltet. Gibt es eine Option, die ich verwenden könnte?

Sie sagten, wenn ich in einem Fragment haben möchte, sollte ich mapview verwenden.

<?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="160dp" 
      android:orientation="vertical"> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:id="@+id/mapHolder" 
     android:layout_width="match_parent" 
     android:layout_height="160dp" 
     > 
     <com.google.android.gms.maps.MapView 
      android:id="@+id/mapImageView" 
      xmlns:map="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      map:liteMode="false" 
      map:mapType="normal" 
      map:cameraZoom="15" /> 
    </RelativeLayout> 
</LinearLayout> 

if (position == 0) { 
       MyGoogleMap myGoogleMap = (MyGoogleMap) holder; 
       GoogleMap googleMap = myGoogleMap.map.getMap(); 
       if (googleMap != null) { 
        for (int i = 0; i < mModelNearbies.size(); i++) { 
         MarkerOptions markerOptions = new MarkerOptions(); 
         LatLng latLng = new LatLng(Double.parseDouble(mModelNearbies.get(i).getShop_lat()), Double.parseDouble(mModelNearbies.get(i).getShop_long())); 
         markerOptions.position(latLng); 
         markerOptions.title(mModelNearbies.get(i).getShop_name() + " : " + mModelNearbies.get(i).getShop_address()); 
         googleMap.addMarker(markerOptions); 
        } 
       } 
      } 

Und für den OnMapReadyCallback.

class MyGoogleMap extends MyNearbyHolder implements OnMapReadyCallback { 
     GoogleMap gMap; 
     MapView map; 

     public MyGoogleMap(View itemView) { 
      super(itemView); 
      map = (MapView) itemView.findViewById(R.id.mapImageView); 

      if (map != null) { 
       map.onCreate(null); 
       map.onResume(); 
       map.getMapAsync(this); 
      } 
     } 

     @Override 
     public void onMapReady(GoogleMap googleMap) { 
      MapsInitializer.initialize(mContext); 
      this.gMap = googleMap; 
      if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
       this.gMap.setMyLocationEnabled(true); 
       LatLng latLng = new LatLng(14.5500, 121.0300); 
       this.gMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
       this.gMap.animateCamera(CameraUpdateFactory.zoomTo(12)); 

      } 
     } 
    } 

Antwort

1

Ihr tatsächliches Problem:

Sie haben bereits GoogleMap Objekt in Ihrem Halter Klasse:

class MyGoogleMap extends MyNearbyHolder implements OnMapReadyCallback { 

    // See this 
    GoogleMap gMap; 

    //Your code 
} 

Dann, warum Sie myGoogleMap.map.getMap() tun ??? Verwenden Sie einfach das vorhandene Objekt auf GoogleMap wie unten:

if (position == 0) { 
     MyGoogleMap myGoogleMap = (MyGoogleMap) holder; 
     GoogleMap googleMap = myGoogleMap.gMap; 
     if (googleMap != null) { 
      for (int i = 0; i < mModelNearbies.size(); i++) { 
       MarkerOptions markerOptions = new MarkerOptions(); 
       LatLng latLng = new LatLng(Double.parseDouble(mModelNearbies.get(i).getShop_lat()), Double.parseDouble(mModelNearbies.get(i).getShop_long())); 
       markerOptions.position(latLng); 
       markerOptions.title(mModelNearbies.get(i).getShop_name() + " : " + mModelNearbies.get(i).getShop_address()); 
       googleMap.addMarker(markerOptions); 
      } 
     } 
    } 

Die Fahrt dauert ca. getMap() veraltet zu ersetzen. Sie haben das bereits gemacht . Verwenden Sie map.getMapAsync(this); in Ihrer Holder-Klasse. Denn getMapAsync ist der Ersatz von getMap.

Sehen Sie diese Frage für weitere Informationen: Replace getMap with getMapAsync

+0

ich zu Ihnen zurück, nachdem ich es versucht. Ich habe ein Problem mit meiner gnymotion google map. Danke –

+0

hast du es überprüft ?? @CharlesGalvez –

+0

Entschuldigung. Ich überprüfe es. –