【发布时间】: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