Ich habe recyclerView in dem ich versuche, jedes Einzelteil Lage zu zeigen, mit Google lite mode.here Karte ist meine Implementierung von RcyclerView Adapter:Google Map Lite-Modus in RecyclerView, OnMapReady nach Liste Update ausführen
public class ItemListAdapter extends RecyclerView.Adapter<ItemListAdapter.MyViewHolder>{
List<ItemListModel> items = new ArrayList<>();
Context context;
public ItemListAdapter(Context context) {
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cardview_item,parent, false);
return new MyViewHolder(v,context);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
ItemListModel item = items.get(position);
holder.setMapLocation(new LatLng(item.getLat(), item.getLon()));
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public void onViewRecycled(MyViewHolder holder)
{
// Cleanup MapView here?
if (holder.gMap != null)
{
holder.gMap.clear();
holder.gMap.setMapType(GoogleMap.MAP_TYPE_NONE);
}
}
public void setItmes(List<ItemListModel> items){
this.items.addAll(items);
notifyDataSetChanged();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback{
GoogleMap gMap;
MapView map;
LatLng mMapLocation;
Context context;
public MyViewHolder(View itemView,Context context) {
super(itemView);
map = (MapView) itemView.findViewById(R.id.mapImageView);
this.context = context;
if (map != null)
{
map.onCreate(null);
map.onResume();
map.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(context);
gMap = googleMap;
}
public void setMapLocation(LatLng mapLocation) {
mMapLocation = mapLocation;
if(gMap != null) {
updateMapContents();
}
}
protected void updateMapContents() {
gMap.clear();
gMap.addMarker(new MarkerOptions().position(mMapLocation));
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(mMapLocation, 15f);
gMap.moveCamera(cameraUpdate);
}
}
}
das Problem ist in myViewHolder und in onMapReady, die onMapReady immer ausgeführt werden, nachdem meine Liste und wegen veröffentlicht, dass der GMap während Liste Update null ist. und setMapLocation wird nicht wie erwartet funktionieren. Als Ergebnis ist mein MapView im Recyclerview Item immer leer.
wo in meinem Code mache ich falsch?
Adapter nach Karte bereit machen und dann an Recyclerview binden. –