找到解决方案(谢谢你的答案!) 它是抽签的高文件大小(.PNG)
我的/ drawables文件夹中有listview和许多.png图像。当我在listview项目的imageview中加载这些图像时,listview的滚动会变得滞后
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.drawer_list_item, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.store_image = (ImageView) convertView.findViewById(R.id.store_image);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(stores[position]);
switch(position){
case 0: Picasso.with(context).load(R.drawable.first).into(holder.store_image);break;
///... more cases ...
default: break;
}
}
return convertView;
}
我正在NavigationDrawer中实现它
修改
我也尝试了这种创建和绘制数组的方法,然后设置了imageview,但仍然是它的滞后。
//in the adapter
int[] store_images = new int[]{R.drawable.first,...and so on};
// and then in getView()
holder.store_image.setImageResource(store_images[position]);
答案 0 :(得分:0)
已编辑的代码
试试这个代码!!
ArrayList<Boolean> alDone= new ArrayList<Boolean>();
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.drawer_list_item, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.store_image = (ImageView) convertView.findViewById(R.id.store_image);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(stores[position]);
if(position==0){
if(!alDone.get(position)){
Picasso.with(context).load(R.drawable.first).into(holder.store_image);
alDone.add(true,position)
}
}
return convertView;
}
答案 1 :(得分:0)
您使用inflater的方式不正确。
试试这个:
convertView = inflater.inflate(layoutResourceId, parent, false);
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
这可能有助于延迟。 Picasso是一个非常好的框架,会为你缓存图像,所以它可能不是原因。
祝你好运!答案 2 :(得分:0)
好!所以问题是19kb的文件大小!我把文件大小减少到5-6kb,滞后就消失了!虽然如果你有同样的问题,我的答案也可能有帮助!
答案 3 :(得分:0)
滞后列表视图可能有很多原因:
答案 4 :(得分:0)
Picasso.with(context).load(R.drawable.first).into(holder.store_image);
建议您已将图像存储在应用中,因此只需将它们直接加载到ImageView中即可。
另一方面,来自ImageView#setImageResource上的文档:
这可以在UI线程上进行Bitmap读取和解码 导致延迟打嗝。如果这是一个问题,请考虑使用 setImageDrawable(android.graphics.drawable.Drawable)或 改为使用setImageBitmap(android.graphics.Bitmap)和BitmapFactory。