java - 如何在RecyclerView中显示多个图像?

标签 java android android-recyclerview android-imageview android-constraintlayout

我正在尝试在 android studio 中开发一个图库应用程序,并且我正在使用 RecyclerView 布局来有效地加载屏幕上的图像,但是每当我向下滚动时,在几张图像之后应用程序就会崩溃。我得到的错误是 java.lang.OutOfMemoryError 所以我认为我在类适配器上犯了错误,但我找不到任何错误(我按照android文档 Create a List with RecyclerView 中给出的步骤进行操作) 。我尝试显示每个图像的缩略图而不是实际图像,但向下滚动一些图像后,应用程序崩溃了,我收到应用程序可能在其主线程上做了太多工作错误

我将留下适配器类的代码。如果您需要更多代码示例或更多信息,请告诉我!

Pd:抱歉,我不清楚,我的英语很差,而且我没有在这里提问的经验,而且这是我在 Android 中的第一个应用程序。

公共(public)类 MyAdapter 扩展了 RecyclerView.Adapter {

public class ViewHolder extends RecyclerView.ViewHolder {

    public ImageView image;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        image = (ImageView) itemView.findViewById(R.id.IMAGEN);
    }
}

private ArrayList<File> images = new ArrayList<>();
private Activity activity;

public MyAdapter(ArrayList<File> images, Activity activity){
    this.images = images;
    this.activity = activity;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
    View v = activity.getLayoutInflater().inflate(R.layout.image_item, viewGroup, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    //Bitmap myBitmap = BitmapFactory.decodeFile(images.get(position).getAbsolutePath());
    //holder.image.setImageBitmap(myBitmap);
    Picasso.get().load(images.get(position)).resize(300,300).centerCrop().into(holder.image);
}

@Override
public void onViewRecycled(@NonNull ViewHolder holder) {
    super.onViewRecycled(holder);
    holder.image.setImageBitmap(null);
}

@Override
public int getItemCount() {
    return images.size();
}

}

最佳答案

您可以使用滑翔。 如果你不想,你可以在 onViewRecycled 中清理你的图像 类似的东西

override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
        super.onViewRecycled(holder)
        holder.image.setImageBitmap(null)
}

关于java - 如何在RecyclerView中显示多个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59244384/

相关文章:

java java.lang.reflect.Array.getLength 与 array.length

android - 更新到 cordova 5.0.0 后生成错误(CordovaChromeClient、DroidGap、CordovaWebView)

java - 从 json 响应调用时 GSON 抛出错误

java - Mysql 更新不适用于变量

java - XML 解析器保留所有空白、属性排序、引号、CDATA、命名空间等

android - 如何在不配对的情况下使用蓝牙在Android编程中发送和接收数据?

android - 接下来关注RecyclerView里面的自定义view

android - notifyItemChanged() 使 RecyclerView 滚动并跳转到 UP

android - Android 中的 RecyclerView 在没有任何错误消息的情况下无法正常工作

java - Gatling 中的 SSL 签名证书身份验证