【问题标题】:scroll lag in Custom ListView自定义 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;
    }
}

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    欢迎来到 SO,并祝贺您发布您的第一个问题。

    使用图像加载库,例如 PicassoGlide

    使用这些库,您可以:

    • 调整图片大小
    • 使用缓存来减少加载时间
    • 自动处理后台线程以加载和转换位图。

    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 如果您选择答案作为已接受的答案或支持它,那您会很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2012-05-11
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多