Das Problem besteht darin, dass das im benutzerdefinierten Adapter initialisierte MapView nicht geladen wird, es sei denn, Sie klicken darauf.
Wie hier bereits erwähnt: Android MapView wird nicht geladen, es sei denn Sie berühren die Kartenansicht
Sie können das Problem lösen, indem Sie onResume() überschreiben.
Ich habe dies auf folgende Weise versucht:
Code: Select all
@Override
public void onResume() {
if(LocationsAdapter.ViewHolder.mapView != null) {
LocationsAdapter.ViewHolder.mapView.onResume();
}
super.onResume();
}
Ich habe das gemacht mapView als öffentliche statische Datei innerhalb des im LocationsAdapter erstellten ViewHolder. Dies scheint nicht zu funktionieren, die Karte ist immer noch leer.
Der ViewHolder im Adapter implementiert OnMapReadyCallback.
Code: Select all
public static class ViewHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback
...
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
Location location = locations.get(getAdapterPosition());
this.googleMap.addMarker(new MarkerOptions().position(location.getLatlng()).title(location.getName()));
this.googleMap.moveCamera(CameraUpdateFactory.newLatLng(location.getLatlng()));
this.googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location.getLatlng(), 7.0f));
}
Code: Select all
mapView.onCreate(null);
mapView.getMapAsync(this);
Mein Ziel Das heißt, die Karte zu laden, unabhängig davon, in welchem Lebenszyklus sich das Fragment gerade befindet.
Ich gehe davon aus, dass Sie für dieses Problem weder den Adapter, das Fragment noch das XML benötigen. Wenn ja, lassen Sie es mich bitte wissen.