Ошибка ворса «Не рассматривайте положение как фиксированное; использовать только немедленно ... »
Я помогаю в библиотеке с открытым исходным кодом и получил ошибку 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);
}
}
Я предполагаю, что концептуально это не сильно изменилось, но пух теперь удовлетворен. Зачем?