Android Studio 从网上下载图片后,如何更新回收站图片?

x9ybnkn6  于 2023-01-14  发布在  Android
关注(0)|答案(1)|浏览(135)

我试图更新我的回收视图后,图像下载完成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一个一个三个一个

qrjkbowd

qrjkbowd1#

你试过在UI线程上运行它吗?

runOnUiThread(() -> notifyItemChanged(position));

相关问题