我试图更新我的回收视图后,图像下载完成onSuccess
方法,但调用notifyItemChanged(position);
不起作用,我想在onSuccess
被调用后更新位置的recyclerview。临时的解决方案是每次调用notifyDataSetChanged();
,但它会扰乱图像和它们的比例。当图像成功下载后,我可以更新recyclerview吗?我该怎么解决这个问题呢?我可以在下载完所有内容后更新所有内容,但android studio建议不要使用notifyDataSetChanged。我知道ImageLoader
类可能(也很可能)效率很低,或者没有很好地编码,所以如果你想建议我进行修改以帮助我改进它,我不需要知道它有多糟糕,我知道
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class ComicViewAdapter extends RecyclerView.Adapter<ComicViewAdapter.ComicViewHolder> {
Context context;
List<String> linksList;
public ComicViewAdapter(Context context, List<String> linksList) {
this.context = context;
this.linksList = linksList;
if (TextUtils.isEmpty(PrefUtils.PREF))
PrefUtils.with(context).setSharedPref(context.getResources().getString(R.string.app_name));
}
@NonNull
@Override
public ComicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comic_view_pager, parent, false);
return new ComicViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ComicViewHolder holder, int position) {
Manga.imageLoader.with(context, context.getCacheDir() + "/cache").load(Manga.resolveURL(linksList.get(position), context),
holder.comic_page, new LoadImage() {
@Override
public void onSuccess(Bitmap bitmap) {
holder.comic_page.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
notifyItemChanged(position);
}
@Override
public void onFail() {
}
}, null);
}
@Override
public int getItemCount() {
return linksList.size();
}
static class ComicViewHolder extends RecyclerView.ViewHolder {
private final ImageView comic_page;
public ComicViewHolder(@NonNull View itemView) {
super(itemView);
comic_page = itemView.findViewById(R.id.comic_page);
}
}
}
使用"ImageLoader"的类及其类可在ImageLoader中找到:https://pastebin.com/mi3txZ7d内存缓存:https://pastebin.com/PcikSwfX文件缓存:https://pastebin.com/wKv2Du2g
x一个一个一个一个x一个一个二个一个x一个一个三个一个
1条答案
按热度按时间qrjkbowd1#
你试过在UI线程上运行它吗?