我通过以下方式做到了这一点。
注意:在我的解决方案中,分隔线是项目视图的一部分,您可以设置背景或画一条线,或添加底部边距并让空间显示背景从而创建分隔线等。我建议查看ItemDecoration api。我只是向您展示如何在 ItemDecoration 中确定您想要做什么。
首先,在您的适配器中:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
...
if (mData.get(postion) instanceof ObjectA)
holder.itemView.setTag(R.id.noSpaceAfter, Boolean.TRUE);
else
holder.itemView.setTag(R.id.noSpaceAfter, Boolean.FALSE);
...
}
然后在你的RecyclerView 中声明一个ItemDecoration
mRecyclerView.addItemDecoration(new MyDividerItemDecoration());
最后,定义你的MyDividerItemDecorator
public class MyDividerItemDecoration extends RecyclerView.ItemDecoration {
public MyDividerItemDecoration () {
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
Boolean noSpace = (Boolean) view.getTag(R.id.noSpaceAfter);
View v = view.findViewById(R.id.view_sep);
if (v != null) {
if (noSpace == null || !noSpace) {
v.setVisibility(View.VISIBLE);
} else {
v.setVisibility(View.INVISIBLE);
}
}
}
}
考虑到这一点,您可以复制DividerItemDecoration 的源代码,然后在它的drawVertical 方法中,当您在循环中获取视图时,检查R.id.noSpaceAfter 是真还是假并跳过绘图相应地。