【发布时间】:2014-01-11 17:22:38
【问题描述】:
嗨,我是 android 的菜鸟,我正在尝试使用自定义适配器将一些数据加载到 ListView。我正在使用以下代码加载数据。第一次,它运行良好。但是,当我尝试加载更多时,数据加载和图像在滚动时随机显示。在该列表中显示一些随机图像后,最终显示正确的图像。它也在下一个滚动中重复
这是我的getView 代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if (v == null) {
LayoutInflater vi =
(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.review_list_m, null);
v.setMinimumHeight(height);
holder = new ViewHolder();
holder.item1 = (TextView) v.findViewById(R.id.name);
holder.image = (ImageView) v.findViewById(R.id.posterView);
v.setTag(holder);
}
else
holder=(ViewHolder)v.getTag();
int colorPos = position % colors.length;
v.setBackgroundColor(Color.parseColor(colors[colorPos]));
final Custom custom = entries.get(position);
if (custom != null) {
holder.image.setBackgroundColor(Color.parseColor(colors[colorPos]));
holder.image.setLayoutParams(new LinearLayout.LayoutParams(height-10,width-10));
String imgUrl=custom.getImage();
AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get(imgUrl, new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(byte[] fileData) {
// Do something with the file
ByteArrayInputStream inputStream = new ByteArrayInputStream(fileData);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
holder.image.setImageBitmap(bitmap);
}
});
holder.item1.setHeight(height/3);
Log.v("PATH",custom.getcustomBig());
holder.item1.setText(custom.getcustomBig());
}
return v;
}
有什么想法吗?请帮忙
更新
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if (v == null) {
LayoutInflater vi =
(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.review_list_m, null);
v.setMinimumHeight(height);
holder = new ViewHolder();
holder.item1 = (TextView) v.findViewById(R.id.name);
holder.image = (ImageView) v.findViewById(R.id.posterView);
v.setTag(holder);
}
else
holder=(ViewHolder)v.getTag();
int colorPos = position % colors.length;
v.setBackgroundColor(Color.parseColor(colors[colorPos]));
final Custom custom = entries.get(position);
if (custom != null) {
holder.image.setBackgroundColor(Color.parseColor(colors[colorPos]));
holder.image.setLayoutParams(new LinearLayout.LayoutParams(height-10,width-10));
final String imgUrl=custom.getImage();
holder.image.setTag(imgUrl);
holder.image.setImageBitmap(null);
Bitmap cachedBitmap = cache.get(imgUrl);
if( cachedBitmap == null) {
Log.v("HERE","DOWNLOADING");
AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get(imgUrl, new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(byte[] fileData) {
// Do something with the file
ByteArrayInputStream inputStream = new ByteArrayInputStream(fileData);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
holder.image.setImageBitmap(bitmap);
}
});
}
else
{
holder.image.setImageBitmap(cachedBitmap);
}
holder.item1.setHeight(height/3);
//Log.v("PATH",custom.getcustomBig());
holder.item1.setText(custom.getcustomBig());
}
【问题讨论】:
-
你的问题在于这一行:
if (custom != null)看到这个链接了解列表视图回收stackoverflow.com/questions/11945563/… -
为解决问题删除这两行 final Custom custom = entries.get(position);如果(自定义!= null)
标签: android android-listview android-asynctask custom-adapter