Сбросить оформление представления Recycler с помощью утилит diff - PullRequest
1 голос
/ 15 февраля 2020

У меня есть представление рециркуляции сетки, которое я обновляю, используя 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 (думаю, что он вызывает комбинацию изменения диапазона элементов, вставленного элемента, удаления элемента для сохранения анимации), поэтому мое украшение не применяется повторно, я, вероятно, могу применить его сам, но это похоже на Кто-нибудь знает, как лучше подходить к удалению и повторному применению украшения при каждом изменении элемента?

1 Ответ

0 голосов
/ 19 февраля 2020

так что вместо того, чтобы пытаться повторно применить декоратор, я собираюсь удалить верхнюю часть отступа в декораторе и вместо этого добавить отступ к верхней части и обрезать до ложного отступа в представлении переработчика

  <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="8dp"
        android:clipToPadding="false"
        android:id="@+id/recyclerView"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...