我为RecyclerView
创建了一个自定义分隔符,方法是扩展DividerItemDecoration
,然后通过在我的RecyclerView上调用addItemDecoration
来应用它。
RecyclerView很好地显示了一切,直到我的数据集发生了变化,我打电话给notifyItemInserted
。新项目确实插入了RecyclerView,但没有我的自定义分隔符显示(其他项目的分隔符已到位)。
当我从新插入的项目滚动然后返回到它时 - 它会出现分隔符。
编辑代码段:
mRecyclerView.addItemDecoration(new GapDividerItemDecoration(mContext, LinearLayoutManager.VERTICAL, 16));
我的自定义装饰器(只是在dp中提供的RecyclerView项目之间添加空格):
public class GapDividerItemDecoration extends DividerItemDecoration {
private int mSpaceInPixels;
private int mOrientation;
public GapDividerItemDecoration(Context context, int orientation, float dp) {
super(context, orientation);
mSpaceInPixels = dpToPixels(dp);
mOrientation = orientation;
}
private int dpToPixels(float dp) {
return (int) (dp * (((float) Resources.getSystem().getDisplayMetrics().densityDpi) / DisplayMetrics.DENSITY_DEFAULT));
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
// Do not draw the divider
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) {
if (mOrientation == LinearLayout.VERTICAL) {
outRect.bottom = mSpaceInPixels;
} else {
outRect.right = mSpaceInPixels;
}
}
}
我没有提供剩下的代码,因为它非常直接(此外,我知道它正在运行,问题可能在于RecyclerView
本身或只是我的自定义装饰器。)< / p>
答案 0 :(得分:1)
这是一个太迟的答案,但是我会回答,因为我有同样的问题。在插入数据之前,请尝试调用RecyclerView.invalidateItemDecorations()。