0

Ich habe ein paar verschiedene Karten in einem RecyclerView. Eine Karte enthält einen MapView:MapView in CardView aktualisiert nur, wenn geklickt wird

<com.google.android.gms.maps.MapView 
      android:id="@+id/map_card_pickup" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" /> 

Im Adapter ich die MapView füllen Sie wie folgt vor (Auszug):

public class myCarAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements OnMapReadyCallback { 
public static class GeneralViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public Button mShareButton; 

    public GeneralViewHolder(View v) { 
     super(v); 
     mV = v; 
     mShareButton = (Button)v.findViewById(R.id.button_share); 
    } 
} 

public static class ViewHolderPickup extends GeneralViewHolder { 
    public Button mLinkButton; 
    public TextView mInfoText; 
    public MapView mMap; 

    public ViewHolderPickup(View v) { 
     super(v); 
     mLinkButton = (Button)v.findViewById(R.id.button_link_pickup); 
     mInfoText = (TextView)v.findViewById(R.id.textView_info_pickup); 
     mMap = (MapView)v.findViewById(R.id.map_card_pickup); 
    } 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v; 

    switch(viewType) { 
     case 1: 
      v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.fragment_my_car_card_pickup, parent, false); 

      ViewHolderPickup viewHolderPickup = new ViewHolderPickup(v); 
      viewHolderPickup.mLinkButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ((FragmentActivity)mV.getContext()).getSupportFragmentManager().beginTransaction() 
          .replace(R.id.content_main, new PickupFragment()) 
          .commit(); 
       } 
      }); 
      viewHolderPickup.mMap.onCreate(null); 
      viewHolderPickup.mMap.getMapAsync(this); 

      return viewHolderPickup; 
    } 

    return null; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    ((GeneralViewHolder)holder).mShareButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast toast = Toast.makeText(mV.getContext(), R.string.cards_shared, Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    }); 

    switch (mDataset.get(position).type) { 
     case PICKUP: 
      ((ViewHolderPickup)holder).mInfoText.setText(mDataset.get(position).msg); 
      break; 
    } 
} 

@Override 
public void onMapReady(GoogleMap map) { 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(new 
      LatLng(51.0107214,6.9549693), 10)); 
    map.addMarker(new MarkerOptions() 
      .position(new LatLng(51.0107214, 6.9549693))); 


} 
} 

Mit dem obigen Code die MapView zeigt mir ein Gitter. Erst wenn ich auf Mapview klicke, wird der Inhalt aktualisiert.

Antwort

0

Ich hatte das gleiche Problem, und ich löste es durch die Lite Version des MapView mit:

xmlns:map="http://schemas.android.com/apk/res-auto" 
(...) 
<com.google.android.gms.maps.MapView 
     (...) 
     map:liteMode="true"/> 

Dieses GitHub Projekt sehr nützlich war: https://github.com/saxman/android-map_list

Hoffe, es hilft.

Verwandte Themen