Android:如何使用RecyclerView实现图库

时间:2015-12-26 20:34:55

标签: android arraylist null android-recyclerview horizontalscrollview

我想在TextView中创建一个ImageViews标题为HorizontalScrollView的图片库,就像它显示在figure中一样。

我使用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.,但这会导致应用崩溃。

1 个答案:

答案 0 :(得分:1)

我想在一个稍微类似的问题中引用我自己的答案:https://stackoverflow.com/a/34462696/1658267(注意!前进,我会使用从那里命名的类/方法)

唯一的区别是用TextViews替换ImageView。像这样:

<?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()方法中检查参数是否为空 - 然后只需设置适当的宽度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]);
        }
    }
    

    创建一个EmptyView,预定义的非宽度为0。

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

我希望,这有帮助。