1

当我上拉/下拉刷新列表时,我在 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;
    }
}
4

0 回答 0