[英]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.