1

Ich versuche, eine Karte als ein Element für eine RecyclerView hinzuzufügen, die in einem Fragment goinjg aufgeblasen wird. Ich initialisiere die Karte in der ViewHolder-Klasse, in der Konstruktormethode habe ich die mMapView.onCreate(null); und mMapView.getMapAsync(this); Methoden verwendet. Dieser Fehler tritt beim Betrieb der Anwendungen:Fehler initialisieren google maps android recyclerview

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.chimera.Fragment" on path: DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000006/DynamiteModulesB_GmsCore_prodmnc_xhdpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000006/n/arm64-v8a, /system/lib64, /vendor/lib64]] 

Im using these libraries from the support lib:com.google.android.gms:play-services:10.2.1, 'com.google.android.gms:play-services-maps:10.2.1', 'com.android.support:recyclerview-v7:25.3.0', 'com.android.support:appcompat-v7:25.3.0', 'com.android.support:support-v4:25.3.0', 'com.android.support:design:25.3.0'. 

Irgendwelche Ideen für diese Behandlung?

 
    class ListingsAdapter extends RecyclerView.Adapter { 

    private final EarthquakesResponse itemResponse; 

    ListingsAdapter() { 
     itemResponse = new EarthquakesResponse(); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     final View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.item_listings_earthquake, parent, false); 
     return new ViewHolder(parent.getContext(), view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     final Feature itemDetail = itemResponse.getFeatures().get(position); 
     holder.prepareItem(itemDetail); 
    } 

    @Override 
    public int getItemCount() { 
     return itemResponse.getMetadata() != null ? itemResponse.getMetadata().getCount() : 0; 
    } 

    void changeResponseData(@NonNull EarthquakesResponse newResponse) { 
     final EarthquakeDiffCallback callback 
       = new EarthquakeDiffCallback(this.itemResponse, newResponse); 
     final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(callback); 

     this.itemResponse.setMetadata(newResponse.getMetadata()); 
     this.itemResponse.setBbox(newResponse.getBbox()); 
     this.itemResponse.setFeatures(newResponse.getFeatures()); 
     this.itemResponse.setType(newResponse.getType()); 

     diffResult.dispatchUpdatesTo(this); 
    } 


    @Override 
    public void onViewRecycled(ViewHolder holder) { 
     super.onViewRecycled(holder); 
     if (holder.mMap != null) { 
      holder.mMap.clear(); 
      holder.mMap.setMapType(GoogleMap.MAP_TYPE_NONE); 
     } 
    } 

    class ViewHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback { 

     private final Context mContext; 
     private final TextView mItemTitle; 
     private MapView mLocation; 
     private GoogleMap mMap; 

     ViewHolder(Context context, View itemView) { 
      super(itemView); 
      this.mContext = context; 
      this.mItemTitle = (TextView) itemView.findViewById(R.id.textview_itemlisting_title); 
      mLocation = (MapView) itemView.findViewById(R.id.mapview_itemlisting_location); 
      if (mLocation != null) { 
       mLocation.onCreate(null); 
       mLocation.getMapAsync(this); 
      } 
     } 

     void prepareItem(@NonNull Feature itemDetail) { 
      mItemTitle.setText(itemDetail.getProperties().getPlace()); 
      setMapLocation(itemDetail); 
     } 

     private void setMapLocation(@NonNull Feature itemDetail) { 
      final List coordinates = itemDetail.getGeometry().getCoordinates(); 
      LatLng location = new LatLng(coordinates.get(1), coordinates.get(0)); 
      mMap.clear(); 
      mMap.addMarker(new MarkerOptions().position(location)); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 8f)); 
     } 

     @Override 
     public void onMapReady(GoogleMap googleMap) { 
      this.mMap = googleMap; 
      MapsInitializer.initialize(this.mContext); 
      this.mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
      googleMap.getUiSettings().setMapToolbarEnabled(false); 

     } 
    } 
} 

Antwort

0

Sie das Hinzufügen einiger Klasse „com.google.android.chimera.Fragment“ in Ihrem xml, die nicht durch Ihre Anwendung zu finden ist. Sie können unter XML-Code in Ihr Fragment für die Karte einfügen.

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