自定义 ListView 中的滚动滞后
Posted
技术标签:
【中文标题】自定义 ListView 中的滚动滞后【英文标题】:scroll lag in Custom ListView 【发布时间】:2021-07-17 22:15:28 【问题描述】:我的项目是一本学费管理书,我通过使用自定义 listView 在 Activity 中列出所有学生及其照片、姓名、ID、课程,它运行良好,但是当添加更多学生时,它在 listview 滚动中显示滞后。使用下面的适配器,我在 listView 中面临滚动滞后。我减小了存储在 SQLite 数据库中的图像的大小(小于 500kb),但它仍然不能顺利运行。 **
适配器代码
public class MyListAdapter extends BaseAdapter
private Context context;
private int layout;
private ArrayList<slmodel> recordlist;
public MyListAdapter(Activity context, int layout, ArrayList<slmodel> recordlist)
this.context = context;
this.layout= layout;
this.recordlist = recordlist;
@Override
public int getCount()
return recordlist.size();
@Override
public slmodel getItem(int position)
return recordlist.get(position);
@Override
public long getItemId(int position)
return position;
private class ViewHolder
ImageView imageView;
TextView name,id, sclass;
@Override
public View getView(int position, View convertView, ViewGroup parent)
View row=convertView;
ViewHolder holder=new ViewHolder();
if(row==null)
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(layout,null);
holder.name=row.findViewById(R.id.bname);
holder.id=row.findViewById(R.id.sid);
holder.sclass =row.findViewById(R.id.scourse);
holder.imageView=row.findViewById(R.id.imageView);
row.setTag(holder);
else
holder=(ViewHolder)row.getTag();
slmodel model=recordlist.get(position);
holder.name.setText(model.getName());
holder.id.setText(model.getId().toString());
holder.sclass.setText(model.getsclass());
byte[] recordimgae=model.getImgae();
Bitmap bitmap= BitmapFactory.decodeByteArray(recordimgae,0,recordimgae.length);
holder.imageView.setImageBitmap(bitmap);
return row;
【问题讨论】:
【参考方案1】:欢迎来到 SO,并祝贺您发布您的第一个问题。
使用图像加载库,例如 Picasso 或 Glide
使用这些库,您可以:
调整图片大小 使用缓存来减少加载时间 自动处理后台线程以加载和转换位图。Glide 示例:
Glide.with(context)
.load(recordImage)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.imageView);
【讨论】:
showing error at .asBitmap() //Cannot resolve method 'asBitmap' in 'RequestBuilder' 感谢兄弟现在的工作......对于位图它写成-> Glide.with(context) .asBitmap().load(recordImage) .diskCacheStrategy(DiskCacheStrategy.ALL) .into (holder.imageView); @mihirSharma 很好,更重要的是,尝试用RecyclerView
替换您的ListView
。它提高了长列表的性能。
@MihirSharma 如果您选择答案作为已接受的答案或支持它,那您会很好以上是关于自定义 ListView 中的滚动滞后的主要内容,如果未能解决你的问题,请参考以下文章