Android:如何使用RecyclerView实现图库

Lar*_* H. 5 null android arraylist horizontalscrollview android-recyclerview

我想创建一个一个图片库TextView的头和ImageViews一个HorizontalScrollView像它显示在此.

我使用a 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
        ));
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:在一行中创建一个空条目的最佳解决方案是什么ArrayList,例如,我有五个ArrayList有15个条目,两个只有14或13个条目.但我希望在确切的行而不是在结尾处的空条目.我试图实现一个null而不是R.drawable.但这会导致应用程序崩溃.

Kon*_*nov 2

我想在一个稍微类似的问题中参考我自己的答案:/sf/answers/2412388751/ (注意!今后,我将使用那里的类/方法命名)

唯一的区别是替换TextViewsImageViews。像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

关于空槽 - 有多种选择:

  • 您可以传递空值,然后在被调用的内容中ChipView(在您的情况下 - 带图像的视图),在displayItem()方法中检查参数是否为空 - 然后只需为View
  • viewType您可以为水平创建单独的视图RecyclerView并为其创建一个空视图(作为占位符)。然后你需要稍微更新一下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]);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    并创建一个EmptyView具有预定义非 0 宽度的 , 。

就我个人而言,我更喜欢第二个选项(解耦,更容易维护 onClick - 没有额外的逻辑,等等)

我希望,它有帮助。