使用Picasso滚动时ListView会断断续续

时间:2015-11-17 20:20:03

标签: android listview android-listview picasso

我有一个观点,即从FragmentActivity中膨胀。此视图包含包含imageview的自定义布局的列表视图。图像从网址下载。我正在使用Picasso处理图像缓存等。我已经实现了我能够找到的每个解决方案,但我的列表视图仍然非常滚动。

播放列表

    LayoutInflater inflater = LayoutInflater.from(context);
    playlistFrame = inflater.inflate(R.layout.playlist_frame, parent, false);

    swipeView = (SwipeRefreshLayout) playlistFrame.findViewById(R.id.swipe);
    playlistView = (ListView) playlistFrame.findViewById(R.id.playlist_view);
    playlistView.setOnScrollListener(new PlaylistScrollListener(context, SCROLL_TAG));
    swipeContainer = (FrameLayout) playlistFrame.findViewById(R.id.swipeContainer);
    playlist = list;
    videoPosition = 0;
    Report listContents[] = new Report[list.size()];

    list.toArray(listContents);
    playlistView.setAdapter(getListAdapter(listContents));
...
    private ArrayAdapter<Report> getListAdapter(final Report item[]) {

    return new ArrayAdapter<Report>(context, R.layout.playlist_item_frame, item) {

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.playlist_item_frame, parent, false);
            }

            final TextView title = (TextView) convertView.findViewById(R.id.playlist_title);
            title.setText(item[position].getTitle());

            final TextView date = (TextView) convertView.findViewById(R.id.playlist_date);
            date.setText(item[position].getDate());

            final TextView description = (TextView) convertView.findViewById(R.id.playlist_description);
            description.setText(item[position].getDescription());

            final ImageView itemImage = (ImageView) convertView.findViewById(R.id.playlist_thumb);
            itemImage.setScaleType(ImageView.ScaleType.FIT_XY);

            Picasso.with(context).load(item[position].thumbnailURLs.standard)
                    .tag(SCROLL_TAG)
                    .fit()
                    .placeholder(R.drawable.playlist_thumbnail)
                    .error(R.drawable.playlist_thumbnail)
                    .centerInside()
                    .into(itemImage);

            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    selectPost(position);
                }
            });

            return convertView;
        }
    };
}

播放列表滚动侦听器

public class PlaylistScrollListener implements AbsListView.OnScrollListener {
private final Context context;
private String scrollTag;

public PlaylistScrollListener(Context context, String tag) {
    this.context = context;
    this.scrollTag = tag;
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    final Picasso picasso = Picasso.with(context);
    if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {
        picasso.resumeTag(scrollTag);
    } else {
        picasso.pauseTag(scrollTag);
    }
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                     int totalItemCount) {
    // Do nothing.
}
}

非常感谢任何改进此滚动问题的帮助。

0 个答案:

没有答案