Android-RecyclerView加载后冻结

Android-RecyclerView加载后冻结,android,scroll,android-recyclerview,freeze,Android,Scroll,Android Recyclerview,Freeze,我有一个RecyclerView,通过检测RecyclerView的结尾,我从数据库中逐个加载项。 我的问题:加载项目后,当我滚动时,RecyclerView会在1-2秒内冻结。 我认为问题来自每个项目的ImageView。 每次加载后,最后一个列表将添加到适配器,如下所示:arrayAdapter.list.addAll(问题)

我有一个RecyclerView,通过检测RecyclerView的结尾,我从数据库中逐个加载项。 我的问题:加载项目后,当我滚动时,RecyclerView会在1-2秒内冻结。 我认为问题来自每个项目的ImageView。 每次加载后,最后一个列表将添加到适配器,如下所示:
arrayAdapter.list.addAll(问题)arrayAdapter.notifyDataSetChanged()

我的助手:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    final Question question = list.get(position);
    holder.tvOwner.setText("Question posée par " + question.ownerUsername);
    holder.tvQuestion.setText(question.question);

    if (question.image != null) {
        holder.questionImage.setImageBitmap(question.image);
        holder.questionImage.setVisibility(View.VISIBLE);
        holder.questionImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavigationMenu nav = (NavigationMenu) context;
                nav.showPictureFullScreen(question.image);
            }
        });
    } else {
        holder.questionImage.setImageBitmap(null);
        holder.questionImage.setVisibility(View.GONE);
    }
多亏了帕万

public class SetImageBitmap extends AsyncTask<Void, Void, Bitmap> {
    Question q;
    ImageView iv;

    public SetImageBitmap(Question q, ImageView iv) {
        this.q = q;
        this.iv = iv;
    }

    @Override
    protected Bitmap doInBackground(Void... params) {
        return q.image;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        iv.setImageBitmap(bitmap);
        iv.setVisibility(View.VISIBLE);
    }
}
公共类SetImageBitmap扩展异步任务{
问题q;
ImageView iv;
公共设置图像位图(问题q,图像视图iv){
这个。q=q;
这4.iv=iv;
}
@凌驾
受保护位图doInBackground(无效…参数){
返回q图像;
}
@凌驾
受保护的void onPostExecute(位图){
iv.设置图像位图(位图);
iv.设置可见性(视图可见);
}
}
多亏了Pavan

public class SetImageBitmap extends AsyncTask<Void, Void, Bitmap> {
    Question q;
    ImageView iv;

    public SetImageBitmap(Question q, ImageView iv) {
        this.q = q;
        this.iv = iv;
    }

    @Override
    protected Bitmap doInBackground(Void... params) {
        return q.image;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        iv.setImageBitmap(bitmap);
        iv.setVisibility(View.VISIBLE);
    }
}
公共类SetImageBitmap扩展异步任务{
问题q;
ImageView iv;
公共设置图像位图(问题q,图像视图iv){
这个。q=q;
这4.iv=iv;
}
@凌驾
受保护位图doInBackground(无效…参数){
返回q图像;
}
@凌驾
受保护的void onPostExecute(位图){
iv.设置图像位图(位图);
iv.设置可见性(视图可见);
}
}

holder.questionImage.setImageBitmap(question.image);您必须在后台线程上执行此操作,并且可能会很好地使用这里的缓存检查之类的东西<代码>yourImageView.post(新的Runnable(){@Override public void run(){//在这里设置下载的映像}})不适用于其他线程,同样的问题。它冻结时,我没有使用异步任务,我前面提到过,或者你可以更好地寻找图像加载库,因为它解决了感谢你。如何设置已解决?holder.questionImage.setImageBitmap(question.image);您必须在后台线程上执行此操作,并且可能会很好地使用这里的缓存检查之类的东西<代码>yourImageView.post(新的Runnable(){@Override public void run(){//在这里设置下载的映像}})不适用于其他线程,同样的问题。它冻结时,我没有使用异步任务,我前面提到过,或者你可以更好地寻找图像加载库,因为它解决了感谢你。如何解决这个问题?