调用RecyclerView.Adapter.notifyItemInserted()时不应用DividerItemDecoration

时间:2017-04-07 07:15:57

标签: android android-studio android-recyclerview

我为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>

1 个答案:

答案 0 :(得分:1)

这是一个太迟的答案,但是我会回答,因为我有同样的问题。在插入数据之前,请尝试调用RecyclerView.invalidateItemDecorations()。