正確には再現できないため、このバグに髪を引っ張っています。データベースから値をロードするカスタム リサイクラー アダプターがあります。ネットワーク ヘルパー クラスを呼び出して URL を構築し、Ion を使用して画像を読み込みます。このバグはスクロール速度には影響されないようですが、サーバーに対して一度に行われる画像呼び出しの量によって影響を受ける可能性があると思います。
public ThreadAdapter(Cursor cursor) {
super(cursor);
}
@Override
public void onBindViewHolderCursor(RecyclerView.ViewHolder holder, Cursor cursor) {
ThreadViewHolder threadViewHolder = (ThreadViewHolder)holder;
networkHelper.getImage(threadViewHolder.image,
cursor.getString(cursor.getColumnIndex(DbContract.ThreadEntry.COLUMN_THREAD_IMAGE_NAME),
cursor.getString(cursor.getColumnIndex(DbContract.ThreadEntry.COLUMN_THREAD_IMAGE_EXTENSION))
);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.from(parent.getContext()).inflate(R.layout.card_thread, parent, false);
ThreadViewHolder viewHolder = new ThreadViewHolder(view);
return viewHolder;
}
class ThreadViewHolder extends RecyclerView.ViewHolder{
public ImageView image;
public ThreadViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.thread_image);
}
}
https://gist.github.com/Shywim/127f207e7248fe48400b
public void getImage(ImageView imageView, String name, String extension){
if (name != null && extension != null){
String imageUrl = "example.com/" + name + extension;
Log.d(LOG_TAG, "Image Url " + imageUrl);
Ion.with(imageView)
.fitCenter()
.placeholder(R.drawable.ic_launcher)
.error(R.drawable.error)
.load(imageUrl);
}else {
imageView.setImageBitmap(null);
}
}
URL を正しく構築し、何かを呼び出す必要がある場合にのみ Ion を呼び出しているようです。プレースホルダー画像が表示されてから消えることがあります。エラー画像が表示されるのを見たことがありません。アイテム A、アイテム B、アイテム C のすべてに読み込みが必要な画像があり、すべてが同時に表示される場合、読み込みに失敗する可能性が高くなります。