带字符的RecyclerView分隔线

时间:2018-12-01 09:41:27

标签: java android android-recyclerview recycler-adapter

我想显示一个项目列表,并使用“ <”字符作为分隔符来分隔它们,以传达有关这些项目之间关系的信息。另外,我应该能够在列表中的最后一项之后隐藏分隔线。我是Android开发人员的新手,所以我一般都在使用RecyclerView,因为它被认为是在Android中显示事物列表的本机/正确方法。生成的用户界面应如下所示:https://i.stack.imgur.com/JoJmj.jpg

我对此进行了研究,发现RecyclerView具有内置的ItemDecoration功能。但是,我只能找到画线的方法:

recyclerView.addItemDecoration(
            new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL));

据我所见,您必须为此使用一个可绘制对象,并且隐藏最后一个分隔符仍然不太方便。

我发现的另一个选择是在RecyclerView的适配器内创建异构布局:https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView,因此,将分隔线作为第二个viewType布局,并在项目布局之后将其充气。但这似乎是一个过大的选择,也使适配器的可重用性降低。与此类似,有一个选项可以为RecyclerView创建一个同时包含两个(项目和分隔线)视图的布局,然后在RecyclerView的Adapter中对其进行充气。但是,这似乎也不是一种预期的方式。

我非常确定此功能是可行的,但是我不确定我列出的任何方法是否正确。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

可以简单地在您的布局和传递给ViewHolder的模型中进行绑定来实现。 更清楚地说,您的模型可以有一个标志,指定是否应显示分隔线,然后相应地绑定视图时,只需显示/隐藏“ <”事物或任何其他种类的分隔线/视图。因此,在项目布局[或可以通过编程方式创建的视图]内部,可以添加例如TextView作为分隔符,并将其可见性设置为GONEVISIBLE

答案 1 :(得分:0)

最干净的解决方案是创建您自己的ItemDecoration实现。您只需要重写两个方法。

使用getItemOffsets()在项目之间添加偏移量,这类似于添加填充或边距。

现在,您在RecyclerView项之间具有“可用”空间,通过覆盖onDraw()方法,您可以使用提供的Canvas对象drawText()方法轻松绘制“ <”字符。

答案 2 :(得分:0)

最简单的方法是通过TextView在项目布局中考虑“ <”。 如果您只想将其隐藏在最后一个项目上,则可以像这样进行检查:

var elements = ['email', 'password', 'password_confirm'];
$j(elements).each(function(i, elem){
    $j('#' + elem).attr('placeholder', $j('#' + elem + '-label label').text());
    $j('#' + elem + '-label').hide();
    if ($j('#' + elem).hasClass('required-entry')) $j('#' + elem).attr('placeholder', $j('#' + elem).attr('placeholder') + ' *');
});

如果您要隐藏/显示其他逻辑,请相应地进行更改。

通过这种方式,您还可以在关系改变时更改字符,或在列表的任何项目中隐藏/显示它。不只是在最后一项。