当我上拉/下拉刷新列表时,我在 ListView 中出现图像消失的问题。当我刷新列表(即上传接下来的 10 个主线)时,只有某些用户/用户的一些图像会消失。我使用下拉刷新列表视图(来自 Chris Banes)和 ImageLoader(来自 nostra13)。我认为存在优先级问题并试图操纵线程优先级,但事实并非如此。如我所见,其他地方存在问题。谁能解释一下问题出在哪里以及如何解决?
ListView 适配器:
public class TweetListAdapter extends ArrayAdapter<Tweet> {
private final Context context;
private final List<Tweet> tweets;
public ImageManager imageManager;
private DisplayImageOptions options;
public TweetListAdapter(Context context, int textViewResourceId, List<Tweet> tweets) {
super(context, textViewResourceId, tweets);
this.context = context;
this.tweets = tweets;
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher)
.showImageForEmptyUrl(R.drawable.ic_launcher)
.cacheOnDisc()
.build();
// imageManager = new ImageManager(context.getApplicationContext());
}
public static class ViewHolder {
public TextView username;
public TextView message;
public ImageView image;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (v == null) {
// Set up Layout inflater to make custom view
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.customtweetlist, null);
holder = new ViewHolder();
holder.username = (TextView) v.findViewById(R.id.tvUsername);
holder.message = (TextView) v.findViewById(R.id.tvText);
holder.image = (ImageView) v.findViewById(R.id.ivImage);
v.setTag(holder);
} else
holder = (ViewHolder) v.getTag();
// Get tweet position and attach each tweet to different custom view
// blocks
final Tweet tweet = tweets.get(position);
if (tweet != null) {
holder.username.setText(tweet.getToUser());
holder.message.setText(tweet.getText());
holder.image.setTag(tweet.getProfileImageUrl());
File cacheDir = new File(Environment.getExternalStorageDirectory(), "UniversalImageLoader/Cache");
// ImageMnagaer is created for images caching
//imageManager.displayImage(tweet.getProfileImageUrl(), context, holder.image);
// Get singletone instance of ImageLoader
ImageLoader imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.MIN_PRIORITY + 2)
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.build();
// Initialize ImageLoader with configuration. Do it once.
imageLoader.init(config);
// Load and display image asynchronously
imageLoader.displayImage(tweet.getProfileImageUrl(), holder.image, options);
}
return v;
}
}