Я вношу вклад в библиотеку с открытым исходным кодом и получил ошибку lint . Не обрабатывайте позицию как фиксированную, используйте ее немедленно и вызывайте holder.getAdapterPosition(), чтобы просмотреть ее позже для этого кода:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mAdapter.onBindViewHolder(holder, position);
if (!isFirstOnly || position > mLastPosition) {
for (Animator anim : getAnimators(holder.itemView)) {
anim.setDuration(mDuration).start();
anim.setInterpolator(mInterpolator);
}
mLastPosition = position;
} else {
ViewHelper.clear(holder.itemView);
}
}
Я проверил, что это потому, что позиция сохраняется для будущего использования. Для создателя библиотеки возникает вопрос, зачем нужна эта логика. Но проблема исчезла, когда я изменил использование позиции на использование holder.getAdapterPosition()
:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mAdapter.onBindViewHolder(holder, position);
if (!isFirstOnly || holder.getAdapterPosition() > mLastPosition) {
for (Animator anim : getAnimators(holder.itemView)) {
anim.setDuration(mDuration).start();
anim.setInterpolator(mInterpolator);
}
mLastPosition = holder.getAdapterPosition();
} else {
ViewHelper.clear(holder.itemView);
}
}
Я предполагаю, что концептуально это не сильно изменилось, но линт теперь удовлетворен. Зачем?