我非常喜欢Android开发,我正在尝试使用图像填充listview,并在OnCreate期间从twitter解析文本。我可以毫无问题地填充列表视图,但列表视图滚动不稳定而不是顺利。起初我认为这是一个模拟器问题,但它也在我的设备上肆虐。让我如此沮丧的原因是我使用了视图持有者方法,即stackoverflow上的所有教程和帖子都是推荐的。任何帮助是极大的赞赏。这是我的代码......
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;}
}
答案 0 :(得分:3)
您的getBitmap方法正在下载并解码UI线程上的图像。这将导致在更高版本的android上滚动和崩溃时出现明显的暂停。
Developer Guide on Bitmap Processing包含一种非常容易实现的异步加载位图的技术