Contribuisco alla libreria open source e ho l'errore lint "Non trattare la posizione come fissa, utilizzare immediatamente e chiamare holder.getAdapterPosition () di guardare in su dopo" per questo codice:Errore filaccia "Non trattare la posizione come fisso, usare solo immediatamente ..."
@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);
}
}
ho controllato che è perché la posizione viene salvato per l'uso futuro. È una domanda al creatore della biblioteca perché ha bisogno di questa logica. Ma problema è scomparso quando cambio l'utilizzo della posizione per l'utilizzo 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);
}
}
Suppongo che concettualmente non ha cambiato molto, ma non peloso è soddisfatto ora. Perché?
Non vi è alcuna garanzia che il bind venga chiamato nell'ordine perfetto in cui le visualizzazioni degli articoli sono effettivamente visibili. Quindi, 'mLastPosition' potrebbe non essere l'ultimo elemento visibile. –
Ok, questo è un buon input per i creatori di librerie, ma perché il lint è soddisfatto ora? –