Android:如何使用 RecyclerView 实现图片库

标签 android arraylist null android-recyclerview horizontalscrollview

我想创建一个图片库,其中包含 TextView 作为标题,ImageViewsHorizo​​ntalScrollView 中,就像在 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 的一行中创建一个空条目的最佳解决方案是什么?我有五个包含 15 个条目的 ArrayList,两个只有 14 或 13 个条目。但我希望空条目位于确切的行而不是末尾。 我试图实现一个 null 而不是 R.drawable. 但这会导致应用程序崩溃。

最佳答案

我想在一个稍微类似的问题中引用我自己的答案: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
  • 设置适当的宽度
  • 您可以为水平 RecyclerView 创建单独的 viewType 并为其创建一个空 View (作为占位符)。然后你需要稍微更新一下 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 - 没有额外的逻辑等)

希望对您有所帮助。

关于Android:如何使用 RecyclerView 实现图片库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475019/

相关文章:

android - 无法使用 JSON 数据填充布局

Android 谷歌 API Java 客户端 com.google.api.client.auth.oauth2.draft10

java - 方法结束后向 HashMap 添加的条目将变为 null

java - 用空值替换对象数组中的项目(java)

java - 如何在osmdroid中扩展ResourceProxy接口(interface)?

android - 在 Android Studio 中解锁 APK 文件以进行编辑

java - 尝试最佳解决方案?

java - ObjectOutputStream 人类可读

java - 连接数组列表中的字符串

java - Android-写入文件会产生随机字符