Baseadapter缓慢且滞后于滚动

时间:2018-07-02 20:02:36

标签: java android listview kotlin

我正在尝试使用baseAdapter创建一个列表视图,该列表视图为每个项目(每个项目的图像和文本)显示带有文本视图的ImageView。但是,列表视图滚动太慢且太慢。

class MyListAdapter:BaseAdapter {
var ListLocal = ArrayList<Food>()
var mCtx : Context?=null
constructor(List:ArrayList<Food>,mCtx:Context){
    this.ListLocal = List
    this.mCtx = mCtx
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): 
View {
    var convertView = convertView
    var holder: ViewHolder

    if (convertView == null) {
        holder= ViewHolder()

        var inflator = LayoutInflater.from(mCtx)
        convertView  = inflator.inflate(R.layout.food_type,null)
        holder.title= convertView.findViewById(R.id.txtT)
        holder.img = convertView.findViewById(R.id.PicT)

        convertView.tag = holder
    }
    else {
        holder = convertView.tag as ViewHolder

    }
    val item = ListLocal[position]
    holder.title!!.text = item.txtname
    holder.img!!.setImageResource(item.picc!!)
    return convertView!!

}

override fun getItem(position: Int): Any {
    return ListLocal[position]
}

override fun getItemId(position: Int): Long {
    return position.toLong()
}

override fun getCount(): Int {
    return ListLocal.size
}




 }

internal class ViewHolder {
    var title: TextView? = null
    var img: ImageView? = null
}

1 个答案:

答案 0 :(得分:1)

如果我不得不猜测,此行是导致您出现问题的原因: holder.img!!.setImageResource(item.picc!!)

由于遇到性能问题,应使用GlidePicasso之类的图像加载器,而不要直接调用setImageResource。您的位图/可绘制对象的大小会严重降低滚动性能,除非它们非常小,因为它们没有被缓存,并且将以1:1大小而不是目标ImageView的大小进行解码。但是,如果不查看更多的代码/图像资产,就无法确定这是否是您的实际性能问题。