У меня есть представление рециркуляции сетки, которое я обновляю, используя diff utils, но если что-то в данных списка приводит к элементу go из любой строки ниже первой строки, вплоть до первой строки, то украшению не хватает отступа top, это отчасти ожидаемо, так как я добавляю отступ только к верху элемента в списке, если он находится в первой строке. Затем я добавляю нижние отступы к каждому элементу,
Декорирование с использованием Recycler
public class GridSpacing extends RecyclerView.ItemDecoration {
private final int spacing;
private final int numColumns;
public GridSpacing(int spacing, int numColumns) {
this.spacing = spacing;
this.numColumns = numColumns;
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
int position = parent.getChildLayoutPosition(view);
if (position < numColumns){
outRect.top = spacing;
}
if (position % 2 != 0) {
outRect.right = spacing;
}
outRect.left = spacing;
outRect.bottom = spacing;
}
}
Если я вызову notifyDatasetChanged, это пересчитает мое украшение и добавит отступ к верху row, но diff utils не вызывает notifyDatasetChanged (думаю, что он вызывает комбинацию изменения диапазона элементов, вставленного элемента, удаления элемента для сохранения анимации), поэтому мое украшение не применяется повторно, я, вероятно, могу применить его сам, но это похоже на Кто-нибудь знает, как лучше подходить к удалению и повторному применению украшения при каждом изменении элемента?