оформление элемента просмотра в рециркуляторе, getItemOffsets вызывается только для последнего добавленного элемента - PullRequest
0 голосов
/ 23 мая 2019

У меня есть элемент украшения, прикрепленный к моему представлению переработчика.Следует добавить большое количество отступов только к последнему элементу.Это отлично работает.Однако, когда я добавляю новые элементы, getItemOffsets вызывается только для последнего элемента (и не для каждого элемента в представлении переработчика).Таким образом, я получаю этот большой отступ для каждого элемента.

Как можно удалить правый отступ для остальных видов при добавлении нового вида?Я хочу добавить элементы правильным способом для сохранения анимации

public void onItemInserted(Card card, int position){
    cardList.add(card);
    notifyItemInserted(getItemCount() -1);
}

Метод смещения моего элемента:

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
    super.getItemOffsets(outRect, view, parent, state);
    outRect.top = horizontalSpace;
    outRect.bottom = horizontalSpace;
    outRect.left = horizontalSpace;
    outRect.right = 0;

    if (parent.getChildAdapterPosition(view) == parent.getChildCount() - 1){
       outRect.right = endSpace;
    }
}

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

getItemOffsets() вызывается только для последнего элемента. Таким образом, украшения для старых предметов никогда не будут повторно храниться. Это происходит потому, что вы вызвали: notifyItemInserted(getItemCount() -1);

Чтобы вызвать getItemOffsets() для двух последних предметов, необходимо:

public void onItemInserted(){
    items++;
    int lastPosition = getItemCount() - 1;
    if(lastPosition > 0) {
        // Request to redraw last two items. So, new item will receive proper padding and old item will restore to the default position
        notifyItemRangeChanged(lastPosition - 1, lastPosition);
    } else {
        notifyItemChanged(lastPosition);
    }
}

Также, как вы упомянули, вы должны использовать state.getItemCount() вместо parent.getChildAdapterPosition(view) во время getItemOffsets()

0 голосов
/ 23 мая 2019

Мне нужно было использовать state.getItemCount () вместо parent.getChildCount ()

...