Я вношу вклад в библиотеку с открытым исходным кодом и получил ошибку 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);
}
}
Я предполагаю, что концептуально это не сильно изменилось, но lint теперь доволен. Почему?
mLastPosition
может быть не последним видимым элементом. - person S.D.   schedule 22.01.2016