簡體   English   中英

Android:如何使用RecyclerView實現圖庫

[英]Android: How to implement a image gallery with RecyclerView

我想創建一個圖像庫,其中TextView作為標題,而HorizontalScrollView ImageViews則顯示在此圖中

我使用RecyclerView減少我的應用程序的資源,並使用許多ArrayList實現圖像:

  itemFotoIDs.addAll(Arrays.asList( R.drawable.cable_crunches_1 ,R.drawable.dips_1 ,R.drawable.kabelrudern_breit_1 ,R.drawable.kabelrudern_eng_1 ,R.drawable.klimmzug_1 ,R.drawable.kh_schulterdruecken_1 ,R.drawable.kh_curls_1 ,R.drawable.lh_bankdruecken_1 ,R.drawable.lh_bankdruecken_eng_1 ,R.drawable.lh_kniebeuge_1 ,R.drawable.lh_kreuzheben_1 ,R.drawable.lh_schraegbankdruecken_1 ,R.drawable.latzug_obergriff_1 ,R.drawable.seitheben_1 ,R.drawable.szhantel_curls_1 )); 

現在我的問題是:在這個ArrayList的一行中創建一個空條目的最佳解決方案是什么,例如,我有五個ArrayList有15個條目,兩個只有14或13個條目。 但我希望在確切的行而不是在結尾處的空條目。 我試圖實現null而不是R.drawable. 但這會導致應用程序崩潰。

我想在一個稍微類似的問題中引用我自己的答案: https//stackoverflow.com/a/34462696/1658267 (注意!前進,我會使用那里的類/方法命名)

唯一的區別是用ImageView替換TextViews 像這樣:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/rounded_background"
    android:layout_margin="4dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/chipImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>

關於空槽 - 有多種選擇:

  • 您可以傳遞空值,然后在稱為ChipView東西(在您的情況下 - 帶圖像的視圖)中,在displayItem()方法中檢查參數是否為null - 然后只需為View設置適當的寬度
  • 您可以為水平RecyclerView創建單獨的viewType ,並為其創建一個空視圖(作為占位符)。 然后你需要稍微更新ChipsAdapter

     static int IMAGE_VIEW_TYPE = 1; static int EMPTY_SLOP_TYPE = 2; @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType = IMAGE_VIEW_TYPE) { return new ChipViewHolder(new ChipView(parent.getContext())); } else { return new ChipViewHolder(new EmptyView(parent.getContext())); } } @Override public int getItemViewType(int position) { return chipsArray[position] == null? EMPTY_SLOP_TYPE : IMAGE_VIEW_TYPE; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder.itemView instanceof ChipView) { ((ChipView) holder.itemView).displayItem(chipsArray[position]); } } 

    並創建一個具有預定義的非0寬度的EmptyView

我個人更喜歡第二個選項(解耦,更容易維護onClick - 沒有額外的邏輯,等等)

我希望,這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM