【问题标题】:recyclerview listview crash when scrolling滚动时recyclerview listview崩溃
【发布时间】:2016-10-17 05:29:54
【问题描述】:

我使用RecyclerView listview 来显示一些列表值。在这个列表中,我有两个ImageView 和一个Textview。当我快速滚动列表时,应用程序崩溃了。在某些设备上发生这种情况。在某些设备上它可以工作但滚动不顺畅。

这是我的适配器

  public class MYAdapter extends RecyclerView.Adapter<MYAdapter.ItemViewHolder> {
        private ArrayList<Data_Model> mItems;
        private ClickListener clicklistener = null;
        private Context context;
        public RVAdapter(Context context,ArrayList<Data_Model> arrayList) {
            this.context = context;
            this.mItems = arrayList;
     }
        public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

            private TextView mTextView;
            private ImageView imageview;
            private ImageView mType;

            public ItemViewHolder(View itemView) {
                super(itemView);

                itemView.setOnClickListener(this);

                mTextView = (TextView) itemView.findViewById(R.id.list_item);
                imageview = (ImageView) itemView.findViewById(R.id.image);
                mType = (ImageView) itemView.findViewById(R.id.mtype);
            }
            @Override
            public void onClick(View v) {

                if (clicklistener != null) {
                    clicklistener.itemClicked(v, getAdapterPosition());
                }
            }
        }
        public void setClickListener(ClickListener listener) {
            this.clicklistener = listener;
        }

        @Override
        public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
            itemViewHolder.mTextView.setText(mItems.get(i).getTitle());

            BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            Bitmap bitmap = BitmapFactory.decodeFile(mItems.get(i).getImage(),bmOptions);

            itemViewHolder.imageview.setImageBitmap(bitmap);

            {
                    Bitmap bitmaps = BitmapFactory.decodeResource(context.getResources(),R.drawable.music);
            itemViewHolder.mType.setImageBitmap(bitmaps);
            }
        @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_row, viewGroup, false);
            ItemViewHolder itemViewHolder = new ItemViewHolder(view);
            return itemViewHolder;
        }
        @Override
        public int getItemCount() {
            return mItems.size();
        }
    }

这是我的清单

错误信息

【问题讨论】:

  • 您遇到了什么错误?
  • 像这样在第一行检查 onBindViewHolder() 方法 if(mItems==null)return;
  • 请发布 logcat 消息
  • Logcat 上没有显示错误。我已经编辑了我的问题和广告错误消息
  • 当此消息出现时,如果我没有错,那么请确保您在 logcat.e 中收到错误日志,所以请分享该日志

标签: android listview android-recyclerview


【解决方案1】:

查看onViewRecycled时一定要回收图片

@Override
public void onViewRecycled(ItemViewHolder holder) {
    holder.imageView.setImageBitmap(null);
}

您的 recyclerview 很可能在滚动时仍然不够流畅,因为您在主线程中同步加载图像。 但我认为它可以在某些时候防止崩溃。所以,我建议你使用像 Picasso 或 Glide 这样的图像加载器库来确保图像是异步加载的,并使你的 recyclerview 中的滚动更加流畅。

@Override
public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
    itemViewHolder.mTextView.setText(mItems.get(i).getTitle());
    Picasso.with(itemViewHolder.imageview.getContext()).load(mItems.get(i).getImage()).into(itemViewHolder.imageView);
    itemViewHolder.imageview.setImageBitmap(bitmap);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2021-12-31
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多