我正在使用智能图片视图从互联网下载图片。 我将图像放在列表视图中并且工作正常,问题在我滚动时开始,应用程序查看以前的图像,一段时间后它显示正确的图像,我希望它不会显示任何内容直到正确的图像准备好,我该怎么做?
import java.util.ArrayList;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.loopj.android.image.SmartImageView;
public class ListAdapter extends BaseAdapter{
Activity context;
ArrayList<Row> List ;
public ListAdapter(ArrayList<Row> List, Activity context) {
this.List = List;
this.context = context;
}
@Override
public int getCount() {
return List.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null){
convertView = inflater.inflate(R.layout.custom_row, parent, false);
holder = new ViewHolder();
holder.image = (SmartImageView) convertView.findViewById(R.id.image);
holder.name = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
String Name = List.get(position).getName();
String image = List.get(position).getURL();
holder.name.setText(Name);
holder.image.setImageUrl(image);
return convertView;
}
static class ViewHolder {
TextView name;
SmartImageView image;
}
}
答案 0 :(得分:0)
这是因为Android中的listviews被重用以帮助提高性能。 SmartImageView的setImageUrl
方法需要一些时间才能完成,并将其与之前的图像保持一致,直至完成
您可以通过在holder.image.setImageUrl(image);
holder.image.setImageBitmap(null);
答案 1 :(得分:0)
问题是下一页上的图像尚未加载,但第一页上的图像是。 ListAdapter在内部重新使用视图,这意味着它具有固定数量的视图,这些视图使用不同的内容进行设置(通过public View getView(int position, View convertView, ViewGroup parent
)。
因此,当新图片已经下载时,SmartImageView很不够智能,无法用占位符替换以前的内容:)
但您可以使用以下method来查看错误的图片:
public void setImageUrl(
String url,
final Integer fallbackResource,
final Integer loadingResource)
e.g。
holder.image.setImageUrl(
image,
R.drawable.my_fallback_drawable,
R.drawable.my_placeholder_drawable);