我是Android開發的初學者。我嘗試使用JSON創建ListView。我有隨機加載的ImageView的問題。這是我的MoviesAdapter.java:android - ViewHolder ImageView隨機加載
package com.dianagung.json;
import java.io.InputStream;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MoviesAdapter extends ArrayAdapter<Movies> {
ArrayList<Movies> ArrayListMovies;
int Resource;
Context context;
LayoutInflater vi;
ViewHolder holder;
public MoviesAdapter(Context context, int resource,
ArrayList<Movies> objects) {
super(context, resource, objects);
ArrayListMovies = objects;
Resource = resource;
this.context = context;
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.mImage = (ImageView) v.findViewById(R.id.mImage);
holder.mTitle = (TextView) v.findViewById(R.id.mTitle);
holder.mDate = (TextView) v.findViewById(R.id.mDate);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.mImage.setImageResource(R.drawable.ic_launcher);
new DownloadImage(holder.mImage).execute(ArrayListMovies.get(position)
.getImage());
holder.mTitle.setText(ArrayListMovies.get(position).getTitle());
holder.mDate.setText(ArrayListMovies.get(position).getDate());
return v;
}
static class ViewHolder {
public ImageView mImage;
public TextView mTitle;
public TextView mDate;
}
// Download Image Task
private class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImage(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon;
}
protected void onPostExecute(Bitmap result) {
if (result != null) {
Bitmap bmp2 = Bitmap.createScaledBitmap(result, 80, 80, true);
bmImage.setImageBitmap(bmp2);
}
}
}
}
任何幫助,將不勝感激。提前致謝。
您的ImageViews加載隨機圖像的原因是,當用戶滾動瀏覽列表時,並非所有圖像都會完成加載並且您正在回收視圖。這意味着您執行的任務將附加到不再顯示相同圖像的ImageView。您需要確保在用戶滾動時取消任務,以便任務不會完成,甚至無法執行,除非仍然需要。你可以在這裏看到這個例子:http://stackoverflow.com/questions/12414648/large-listview-containing-images-in-android/12532386#12532386 – MCeley 2014-08-31 04:26:10