2016-08-25 97 views
0

我的問題是基本上無法在RecyclerView中看到CardView的圖像。CardView的圖像沒有顯示在RecyclerView中

我會注意到,我在應用程序的其他部分使用此卡,並且不會產生任何問題 - 同樣在卡中,XML也有一些與此無關的部分,因爲它們與動畫相關點擊它。

編輯:我嘗試了相同的代碼,但在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

這是必要的,即使我膨脹了一個已經定義了圖像的src的XML? – bluesummers

0

如果我你沒有錯,你忘了在圖像上設置圖像視圖。 即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

感謝您的回覆Ryan,儘管我使用的是https://github.com/上的卡片模板4k3R /材料共享卡,這就是爲什麼我需要嵌套佈局,一個用於背景彈出,第二個用於顯示按鈕 – bluesummers