java Baseadapter滚动速度慢且滞后
我正在尝试使用baseAdapter创建一个listview,它为每个项目(每个项目的图像和文本)显示一个带有文本视图的ImageView。但是,listview滚动太慢
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 楼答案
如果非要我猜的话,这句话就是你问题的原因:
holder.img!!.setImageResource(item.picc!!)
因为您有性能问题,所以应该使用像Glide或Picasso这样的映像加载程序,而不是直接调用
setImageResource
。位图/绘图表的大小可能会严重降低滚动性能,除非它们非常小,因为它们没有缓存,并且将以1:1的大小而不是目标ImageView的大小进行解码。但是,如果没有看到更多的代码/映像资产,就无法判断这是否是您的实际性能问题