我需要在RecyclerView中的两个元素之间添加divider,但不要在每两个元素之间添加divider,只需在一个元素之间添加。
好的,我会以更好的方式解释你。 我有两组元素,我需要在它们之间制作某种自定义分隔符。如何以最优化的方式实现这一目标。 我有想法改变ItemLayout并添加拆分器,但我认为这个选项不够快。
答案 0 :(得分:0)
我的假设是您可能已经为蓝色和红色项目使用了不同的itemviewtypes。我建议为你的分隔符创建另一个itemviewtype,在你的数据列表中添加一个虚拟对象,然后检查RecyclerView.Adapter.onCreateViewHolder
是否在instanceof
的当前位置有这样一个对象。然后返回一个具有所需分隔符布局的视图。
有关viewtypes的教程可以在这里找到:How to create RecyclerView with multiple view type?。
答案 1 :(得分:0)
我认为,对于奇异分割器使用其他类型的布局是一个不错的选择。 如果你警告性能,那么我会冷静下来,没有任何性能问题:
当然你可以使用ItemDecoration,但是你需要自己处理所有问题。您需要确定孩子的位置并决定是否需要绘制分割器。我认为这更痛苦。
答案 2 :(得分:0)
我在这里的解决方案https://pastebin.com/4J7sPaCF:
public class SingleDividerDecoration extends DividerItemDecoration {
private final int height;
private int position = -1;
public SingleDividerDecoration(Context context, @DrawableRes int dividerId) {
super(context, LinearLayout.VERTICAL);
Drawable divider = ContextCompat.getDrawable(context, dividerId);
this.height = divider.getIntrinsicHeight();
setDrawable(divider);
}
public void setPosition(int position) {
this.position = position;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int viewPosition = parent.getChildAdapterPosition(view);
int dividerHeight = viewPosition == position ? height : 0;
outRect.set(0, 0, 0, dividerHeight);
}
}