当前位置: 首页 > 知识库问答 >
问题:

在 GridLayout RecyclerView 中添加分隔符

仲皓君
2023-03-14

我尝试在我的GridLayout RecyclerView中添加水平分隔线。但出于某种原因,分割线没有出现。

作为替代方法,我使用具有 2 个参数的 addItemDecoration 方法,其中第二个参数是索引,之后添加 ItemDecoration。

RecyclerView r = (RecyclerView) findViewById(R.id.recycler_view);
r.setAdapter(new AppAdapter(this, fetchData());
r.setLayoutManager(new GridLayoutManager(this, 5));
r.addItemDecoration(new DividerItemDecoration(this, GridLayoutManager.HORIZONTAL), 2);

它强制关闭,但有以下例外:

Caused by: java.lang.IndexOutOfBoundsException: Index: 2, Size: 0

这个尺寸意味着什么?为什么是零?

可能是因为我在活动而不是片段中使用此回收器视图吗?

P、 美国:适配器没有问题;它不是空的。

共有2个答案

翟曦之
2023-03-14

使用这种方式:

创建名为divider_shape.xml的形状

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid android:color="@color/primary" />
</shape>

垂直和水平方向使用DividerItemDecoration

val verticalDecorator = DividerItemDecoration(view.context, DividerItemDecoration.VERTICAL)
val horizontalDecorator = DividerItemDecoration(view.context, DividerItemDecoration.HORIZONTAL)

val drawable = ContextCompat.getDrawable(view.context, R.drawable.divider_shape)
verticalDecorator.setDrawable(drawable!!)
horizontalDecorator.setDrawable(drawable!!)

view.recyclerView.apply {
    addItemDecoration(verticalDecorator)
    addItemDecoration(horizontalDecorator)
    layoutManager = GridLayoutManager(view.context, 2)
    adapter = movieAdapter
}
陶和歌
2023-03-14

这个错误是因为你告诉RecyclerView绘制你的装饰数字2,而没有告诉它绘制数字1和0。

(它被实现为一个按顺序绘制的装饰的ArrayList,它试图将索引2处的装饰插入到一个空的Array List中-因此是OutOfBounds!)

编辑:这是一个工作示例:

我已经测试了此代码,如果您进行以下更改,它可以正常工作:

1-使用方法的单参数版本,索引版本将给出超出边界的解释(您需要从0开始索引)。

r.addItemDecoration(new SpacesItemDecoration(10));

2- 使用以下项目装饰类:

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.bottom = space;
    }
}

这将仅在底部为您提供空间(对于水平分隔线)。

3-更改RecyclerView布局,使RecyclerView的背景色为您希望分隔条的颜色:

<android.support.v7.widget.RecyclerView
                                                    android:layout_width="match_parent"
                                                    android:layout_height="match_parent"
                                                    android:background="#000000"> # DIVIDER COLOUR

            </android.support.v7.widget.RecyclerView>

4-更改项目布局,使根项目的背景不透明,并且与RecyclizerView的颜色不同(显然)

<RelativeLayout
            android:id="@+id/item_root"
            android:background="#cc00cc"
          android:layout_width="match_parent"
          android:layout_height="wrap_content">

之前没有显示任何内容的原因可能是因为RecyclerView背景和项目背景相同,所以分隔符不可见。

此方法适用于线性和网格布局管理器。

我希望这(最后!)帮助:)

 类似资料:
  • 我正在为Prestashop编写一个模块,该模块覆盖AdminProductsController,并向BackOffice产品视图中的批量操作菜单中添加另外两个操作。这是我在重写类的构造中添加批量操作的代码 结果是这样的 我想在“删除选定项”和“导出选定项”之间添加分隔符。我的意思是,在我新添加的条目之前添加它。我怎样才能做到这一点?

  • 我正在构建一个使用的Android应用程序。我想将分隔符添加到,我用下面的代码做到了这一点: 到目前为止,一切正常。然而,分隔线占据了全屏幕的大小,我想给它增加边距。有没有什么方法可以给分隔线添加边距,方法是给绘制的矩形添加一些空间,而不是创建一个带边距的自定义可绘制形状,并将其添加到< code > recycle view 中?

  • 问题内容: 我有一个 JComboBox ,想在元素列表中有一个分隔符。如何在Java中做到这一点? 一个方便使用的示例场景是制作用于字体族选择的组合框。与Word和Excel中的font-family-selection- control类似。在这种情况下,我想在顶部显示最常用的字体,然后显示一个分隔符,最后按字母顺序显示分隔符下方的所有字体系列。 谁能帮我解决这个问题,或者在Java中是不可能

  • 问题内容: 我对Swift还是相当陌生,在寻找一种将空间添加为千位分隔符的方法时遇到了很多麻烦。 我希望实现的是获取计算结果并将其显示在文本字段中,以便格式为: 2358 000 代替 2358000 例如。 我不确定是否应该格式化Int值,然后将其转换为String,或者在将Int值转换为String之后添加空格。任何帮助将不胜感激。 问题答案: 您可以使用NSNumberFormatter指定

  • 我需要按、和的间隔(步长为5)对数据进行分组。对于每个组,我要估计中位数 我可以分组数据并计算的中值,但是我不知道如何添加的间隔: 正确的应该结构如下(数字可能不同,这只是数据结构的一个例子): 更新: 最终结果应该是这样的。因此,基本上,和分别是上下限:

  • 问题内容: 我有一个包含二进制数字的字符串。如何将其分成几对数字? 假设字符串是: 我想在每2个字符后添加一个分隔符,例如“:”(即冒号)。 我希望输出为: 我怎么能在Swift中做到这一点? 问题答案: Swift 5.1•Xcode 11或更高版本 测试中