プルアップ/ダウンしてリストを更新すると、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;
}
}