【问题标题】:initialize error google maps android recyclerview初始化错误谷歌地图android recyclerview
【发布时间】:2017-03-24 19:19:15
【问题描述】:

我正在尝试将地图添加为 RecyclerView, 的项目,该项目将在片段中膨胀。 我在 ViewHolder 类中初始化地图,在构造函数方法中,我使用了 mMapView.onCreate(null); 和 mMapView.getMapAsync(this); 方法。 运行应用程序时出现此错误:

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]]

我正在使用支持库中的这些库:

  • 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.

有什么处理这个问题的想法吗?

class ListingsAdapter extends RecyclerView.Adapter<ListingsAdapter.ViewHolder> {

    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<Double> 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);

        }
    }
}

【问题讨论】:

    标签: android google-maps android-fragments android-recyclerview


    【解决方案1】:

    您在 xml 中添加了一些您的应用找不到的类“com.google.android.chimera.Fragment”。您可以在片段中为地图添加以下 xml 代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多