2016-08-25 3 views
0

Моя проблема в основном не в том, чтобы видеть изображение CardView внутри RecyclerView.Изображение CardView не отображается в RecyclerView

Отметьте, что я использую эту карту в других частях приложения, и это не создает никаких проблем. Также в карточке XML есть некоторые части, которые также не имеют отношения к этому, поскольку они связаны с анимацией, когда щелкнув по нему.

EDIT: Я попробовал один и тот же код, но раздувается в onCreateViewHolder другой файл .xml, содержащий только изображение, и она работала отлично ... Так что проблема сужается к card_layout.xml не показывает изображение и описание.

То, что я пытаюсь сделать, это дисплей внутри RecyclerView эта карта: enter image description here

Что я получить в конечном итоге это: enter image description here

Обычно я использую другой менеджер компоновки, но я просто загружаю код с помощью стандартного LinearLayoutManager, также я оставил некоторые функции пустыми, поскольку это не имеет значения для этой проблемы:

Фрагмент

public class FavoritesFragment extends Fragment { 

    private static final String TAG = "FavoritesFragment"; 

    private Context mContext; 
    private RecyclerView mRecyclerView; 
    private FavoritesAdapter mFavoritesAdapter; 

    private ArrayList<String> testData; 


    public FavoritesFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View layout = inflater.inflate(R.layout.fragment_favorites, container, false); 

     mContext = getContext(); 

     testData = new ArrayList<>(); 
     testData.add("0"); 
     testData.add("1"); 
     testData.add("2"); 
     testData.add("3"); 
     testData.add("4"); 

     initRecyclerView(layout, testData); 

     return layout; 
    } 



    private void initRecyclerView(View layout, ArrayList<String> testData) { 

     mRecyclerView = (RecyclerView)layout.findViewById(R.id.recyclerViewFavorites); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext)); 
     mRecyclerView.setHasFixedSize(true); 
     mRecyclerView.setAdapter(new FavoritesAdapter(testData, mContext)); 
     mRecyclerView.addOnScrollListener(new CenterScrollListener()); 
    } 

    private class FavoritesAdapter extends RecyclerView.Adapter<FavoritesAdapter.ViewHolder> { 

     private List<String> data; 
     private Context mContext; 

     // ViewHolder to hold the card 
     public class ViewHolder extends RecyclerView.ViewHolder { 

      private View mContainer; 
      private ImageView mItemImage; 
      private TextView mDescription; 
      private TextView mPrice; 
      private TextView mShippingDate; 

      public ViewHolder(View cardView) { 
       super(cardView); 

       mContainer = cardView.findViewById(R.id.card_container); 
       mItemImage = (ImageView)cardView.findViewById(R.id.card_item_image); 
       mDescription = (TextView)cardView.findViewById(R.id.card_description); 
       mPrice = (TextView)cardView.findViewById(R.id.card_description); 
       mShippingDate = (TextView)cardView.findViewById(R.id.card_shipping); 
      } 
     } 

     public FavoritesAdapter(List<String> data, Context context) { 
      mContext = context; 
      this.data = data; 
     } 

     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(mContext).inflate(R.layout.card_layout, parent, false); 

      return new ViewHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(ViewHolder holder, int position) { 

     } 

     @Override 
     public int getItemCount() { 
      return data.size(); 
     } 


    } 

} 

fragment_favorites.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.panasonixx.asosplus.FavoritesFragment"> 

    <android.support.v7.widget.RecyclerView 
      android:id="@+id/recyclerViewFavorites" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_centerInParent="true" /> 

</FrameLayout> 

card_layout.xml

<android.support.v7.widget.CardView xmlns:cardview="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/card_container" 
    cardview:cardCornerRadius="2dp" 
    cardview:cardElevation="4dp" 
    cardview:cardUseCompatPadding="true"> 

    <RelativeLayout 
     android:id="@+id/relativeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <FrameLayout 
      android:id="@+id/frameLayout" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="false" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentEnd="false" 
      android:layout_alignParentStart="false" 
      android:layout_above="@+id/card_description"> 

      <LinearLayout 
       android:id="@+id/linearView" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:background="@android:color/holo_purple" 
       android:gravity="center_vertical" 
       android:orientation="vertical" 
       android:visibility="gone"> 

       <LinearLayout 
        android:id="@+id/layoutButtons" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        android:orientation="vertical" 
        android:visibility="gone"> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="@dimen/activity_vertical_margin" 
         android:text="@string/card_reveal_buy" /> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="@dimen/activity_vertical_margin" 
         android:text="@string/card_reveal_share" /> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/card_reveal_favorite" /> 


       </LinearLayout> 

      </LinearLayout> 

      <ImageView 
       android:id="@+id/card_item_image" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:adjustViewBounds="true" 
       android:contentDescription="@string/image" 
       android:src="@drawable/test_image" 
       android:scaleType="centerCrop" 
       android:layout_gravity="center_horizontal|top" /> 

     </FrameLayout> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/price" 
      android:id="@+id/card_price" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentStart="true" 
      android:layout_margin="2dp" /> 

     <TextView 
      android:layout_width="80dp" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/shipping" 
      android:id="@+id/card_shipping" 
      android:textAlignment="viewEnd" 
      android:layout_alignTop="@+id/card_price" 
      android:layout_alignParentEnd="true" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="2dp" 
      android:layout_marginTop="2dp" 
      android:layout_marginBottom="2dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="@string/desc" 
      android:id="@+id/card_description" 
      android:textAlignment="center" 
      android:layout_above="@+id/card_price" 
      android:layout_alignParentStart="true" 
      android:layout_alignEnd="@+id/card_shipping" 
      android:layout_marginBottom="8dp" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/card_image_description" 
      android:id="@+id/card_shipping_icon" 
      android:src="@drawable/ic_local_shipping" 
      android:layout_alignTop="@+id/card_shipping" 
      android:layout_toStartOf="@+id/card_shipping" /> 


    </RelativeLayout> 


</android.support.v7.widget.CardView> 

ответ

0

Вы не являются обязательными видом грести в onBindViewHolder метод, использовать его как:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position) { 
    final ViewHolder myHolder = (ViewHolder) holder; 
    Favourite fav=Favourites.get(position); 
    holder.mItemImage.setImageBitmap etc ... 
+0

Я надуваю card_layout.xml напрямую - я не использую никаких данных, вы правы, это будет так, но на данный момент я только хочу, чтобы он отображался. – bluesummers

+0

Затем в ваших поддельных данных определите целое число и добавьте ' R.drawable.yourdrawable' –

+1

это необходимо, даже если я раздуваю XML, который уже определяет src изображения? – bluesummers

0

Если я Не ошибетесь, вы забыли установить изображение на изображении Посмотреть. i.e mItemImage.setImageResource (R.drawable.apple);

См this

+1

Ресурс уже прикреплен к XML-файлу, который теперь не делает ViewHolder, это только шаблон для будущей функциональности. – bluesummers

0

Там несколько вещей, которые могли бы идти.

Прежде всего, каков размер этого изображения? Если он достаточно велик, возможно, неправильно загрузить растровое изображение. Я сомневаюсь, что это проблема, если она загружается в другие части приложения в порядке, но определенно является соображением.

У вас есть странная настройка для ваших макетов. Рекомендуется избегать использования вложенных макетов как можно больше, так как они могут влиять на производительность. Вы упомянули, что вы опустили некоторые вещи из-за анимации, но я настоятельно рекомендую вам внести некоторые изменения в любом случае. Если вы в состоянии дать мне полную картину того, как должен выглядеть макет, я могу настроить его; но вот примерная идея:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cardview="http://schemas.android.com/apk/res-auto" 
android:id="@+id/card_container" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
cardview:cardCornerRadius="2dp" 
cardview:cardElevation="4dp" 
cardview:cardUseCompatPadding="true"> 

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:id="@+id/layoutButtons" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:orientation="vertical" 
     android:visibility="gone"> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:text="buy" /> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:text="share" /> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="reveal" /> 

    </LinearLayout> 

    <ImageView 
     android:id="@+id/card_item_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|top" 
     android:adjustViewBounds="true" 
     android:contentDescription="image" 
     android:scaleType="centerCrop" 
     android:layout_above="@+id/card_price" 
     android:src="@drawable/ic_dashboard_black_24dp" /> 

    <TextView 
     android:id="@+id/card_price" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentStart="true" 
     android:layout_margin="2dp" 
     android:text="price" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/card_shipping" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignTop="@+id/card_price" 
     android:layout_marginBottom="2dp" 
     android:layout_marginLeft="2dp" 
     android:layout_marginRight="2dp" 
     android:layout_marginTop="2dp" 
     android:text="shipping" 
     android:textAlignment="viewEnd" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/card_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/card_price" 
     android:layout_alignEnd="@+id/card_shipping" 
     android:layout_alignParentStart="true" 
     android:layout_marginBottom="8dp" 
     android:text="desc" 
     android:textAlignment="center" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <ImageView 
     android:id="@+id/card_shipping_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/card_shipping" 
     android:layout_toStartOf="@+id/card_shipping" 
     android:contentDescription="desc" 
     android:src="@drawable/ic_event_black_24dp" /> 

</RelativeLayout> 

Скорее всего, вы должны быть в состоянии избавиться от этого LinearLayout с кнопками, но я не мог сказать, где вы хотели, чтобы идти.

Дайте мне знать, если это поможет.

+1

Спасибо за ответ Райан, хотя я использую шаблон карты здесь https://github.com/ 4k3R/material-sharing-card, поэтому мне нужен вложенный макет, один для фонового воспроизведения, а второй для кнопок, показывающих – bluesummers

Смежные вопросы