Android 为什么我的listview不能顺利滚动?
我是Android开发的新手,我正在尝试用一个图像填充listview,一个在OnCreate期间从twitter解析的文本。我可以毫无问题地填充listview,但是listview的滚动不是平稳的,而是急促的。起初我认为这是一个模拟器的问题,但在我的设备上它也会显得很不稳定。令人沮丧的是,我使用的是stackoverflow上所有教程和帖子推荐的viewholder方法。非常感谢您的帮助。这是我的密码Android 为什么我的listview不能顺利滚动?,android,listview,view,scroll,layout-inflater,Android,Listview,View,Scroll,Layout Inflater,我是Android开发的新手,我正在尝试用一个图像填充listview,一个在OnCreate期间从twitter解析的文本。我可以毫无问题地填充listview,但是listview的滚动不是平稳的,而是急促的。起初我认为这是一个模拟器的问题,但在我的设备上它也会显得很不稳定。令人沮丧的是,我使用的是stackoverflow上所有教程和帖子推荐的viewholder方法。非常感谢您的帮助。这是我的密码 public View getView(int position, View conve
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitem, null);
ViewHolder holder = new ViewHolder();
holder.username = (TextView) v.findViewById(R.id.username);
holder.message = (TextView) v.findViewById(R.id.message);
holder.image = (ImageView) v.findViewById(R.id.avatar);
v.setTag(holder);
}
Tweet tweet = tweets.get(position);
if (tweet != null) {
ViewHolder holder = (ViewHolder)v.getTag();
holder.username = (TextView) v.findViewById(R.id.username);
holder.message = (TextView) v.findViewById(R.id.message);
holder.image = (ImageView) v.findViewById(R.id.avatar);
if (holder.username != null) {
holder.username.setText(tweet.username);
}
if(holder.message != null) {
holder.message.setText(tweet.message);
}
if(holder.image != null) {
holder.image.setImageBitmap(getBitmap(tweet.image_url));
}
}
return v;
}
}
static class ViewHolder {
TextView username;
TextView message;
ImageView image;
}
public Bitmap getBitmap(String bitmapUrl) {
try {
URL url = new URL(bitmapUrl);
return BitmapFactory.decodeStream(url.openConnection() .getInputStream());
}
catch(Exception ex) {return null;}
}
getBitmap方法正在UI线程上下载和解码图像。这将导致滚动出现明显停顿,并在android的更高版本上崩溃
包含一种非常容易实现的异步加载位图的技术getBitmap是否通过internet下载图像?能否发布getBitmap的代码?位图操作可能非常慢,通常必须异步完成。是的,请检查我的编辑。我添加了该方法,以便您可以查看。@Rob请检查我的编辑,谢谢。您也没有正确使用ViewHolder。ViewHolder的整个要点是,您只需在第一次充气时运行findViewById调用,而不必在以后重复使用传入视图进行转换时运行findViewById调用。您应该删除第二组三个findViewById调用。