1

Я попытался заставить его работать, я получил только серое серое с логотипом Google в левом нижнем углу в месте фрагмента. Карты предназначены для отображения в CardView, загружаемом FirebaseRecyclerAdapter. Ошибок не возникает, и ключ API правильный. Когда я несколько раз прокручиваю элементы вверх и вниз, карты медленно загружаются в каждом прокрутке. Если оставить без прокрутки, ничего не загрузится.Несколько Google Maps Lite в FirebaseRecycler

XML-карты заключается в следующем:

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:map="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.CardView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    card_view:cardUseCompatPadding="true" 
    card_view:cardElevation="1dp" 
    card_view:cardCornerRadius="0dp" 
    android:layout_marginLeft="-3dp" 
    android:layout_marginRight="-3dp" 
    android:id="@+id/cv"> 
    <com.google.android.gms.maps.MapView 
       class="com.google.android.gms.maps.MapFragment" 
       android:id="@+id/mapLite" 
       android:layout_width="match_parent" 
       android:layout_height="150dp" 
       map:mapType="normal" 
       map:liteMode="true"/> 
    </android.support.v7.widget.CardView> 
</LinearLayout> 

Код для Firebase адаптера заключается в следующем:

adapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.card_view_item, PostViewHolder.class, ref.child("message").child(currentGroupKey)) { 

    @Override 
    protected void populateViewHolder(final PostViewHolder postViewHolder, final Post post, int position) { 
     super.populateViewHolder(postViewHolder, post, position); 
    } 
}; 

И код PostViewHolder:

public class PostViewHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback { 
    public MapView mapView; 


    public PostViewHolder(View itemView) { 
     super(itemView); 

     mapView = (MapView) itemView.findViewById(R.id.mapLite); 

     mapView.onCreate(null); 
     mapView.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     CameraUpdate updateCamera = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(40.712784, -74.005941), 10, 0f, 0)); 
     googleMap.moveCamera(updateCamera); 
    } 
} 

Кто-нибудь знает, что может проблема?

ответ

1

Я нашел ответ! Проблема заключалась в неправильном пространстве имен в XML. Я нашел решение, изучив этот пример: https://github.com/saxman/android-map_list. Пыльник я отправляю право версия файлов показали выше, в случае, если кто-нибудь есть аналогичная проблема:

XML Карта:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<android.support.v7.widget.CardView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    card_view:cardUseCompatPadding="true" 
    card_view:cardElevation="1dp" 
    card_view:cardCornerRadius="0dp" 
    android:layout_marginLeft="-3dp" 
    android:layout_marginRight="-3dp" 
    android:id="@+id/cv"> 
      <com.google.android.gms.maps.MapView 
       android:name="com.google.android.gms.maps.MapFragment" 
       android:id="@+id/mapLite" 
       android:layout_width="match_parent" 
       android:layout_height="150dp" 
       map:liteMode="true"/> 
    </LinearLayout> 
</android.support.v7.widget.CardView> 

Код для Firebase адаптера:

adapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.card_view_item, PostViewHolder.class, ref.child("message").child(currentGroupKey)) { 
    @Override 
    public void onBindViewHolder(PostViewHolder viewHolder, int position) { 
     super.onBindViewHolder(viewHolder, position); 
     viewHolder.setMapLocation(52.235474, 21.004057); 
    } 

    @Override 
    protected void populateViewHolder(final PostViewHolder postViewHolder, final Post post, int position) { 
     super.populateViewHolder(postViewHolder, post, position); 
    } 
}; 

И PostViewHolder:

public class PostViewHolder extends RecyclerView.ViewHolder { 
    public MapView mapView; 

    protected GoogleMap mGoogleMap; 
    protected LatLng mMapLocation; 

    public PostViewHolder(final View itemView) { 
     super(itemView); 
     mapView = (MapView) itemView.findViewById(R.id.mapLite); 

     mapView.onCreate(null); 
     mapView.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 

       mGoogleMap = googleMap; 
       MapsInitializer.initialize(itemView.getContext()); 
       googleMap.getUiSettings().setMapToolbarEnabled(true); 
       if (mMapLocation != null) { 
        updateMapContents(); 
       } 
      } 
     }); 
    } 

    public void setMapLocation(double lat, double lon) { 
     mMapLocation = new LatLng(lat, lon); 

     if (mGoogleMap != null) { 
      updateMapContents(); 
     } 
    } 

    protected void updateMapContents() { 
     mGoogleMap.clear(); 
     // Update the mapView feature data and camera position. 
     mGoogleMap.addMarker(new MarkerOptions().position(mMapLocation)); 
     CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(mMapLocation, 10f); 
     mGoogleMap.moveCamera(cameraUpdate); 
    } 
} 
+0

, что пространство имен уверенно PITA! Спасибо, хотя :-) – goonerDroid