在没有延迟的情况下,在ListView中从URL加载图像的正确方法是什么

时间:2018-04-17 17:13:02

标签: android listview delay image-loading

我必须显示一个帖子列表,其中一些包含图片(想想像twitter一样)并在我在ListView上滚动时加载更多,但图像需要几秒钟才能显示。如何毫不拖延地完成负载?目前我正在使用 Picasso

进行此操作

这是我的代码:

 ListView lv = findViewById(R.id.list_feed);
    arrayPosts = fillArray(data);
    adapter= new PostAdapter(this, arrayPosts);
    lv.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                             int totalItemCount) {

            int lastIndexInScreen = visibleItemCount + firstVisibleItem;

            if (lastIndexInScreen >= totalItemCount && totalItemCount > 0 && !isLoading) {
                isLoading = true;

                loadMore();
            }
        }
    });

    lv.setAdapter(adapter);

我的适配器的getView()方法:

public View getView(int i, View view, ViewGroup viewGroup) {

    Post post = (Post) getItem(i);
    view = LayoutInflater.from(context).inflate(R.layout.row_post_item, null);
    (...)

    Picasso.with(context).load(post.getImgProfile()).into(imgProfile);
    Picasso.with(context).load(post.getImagePost()).into(imgPost);

    (...)
    return view;
}

2 个答案:

答案 0 :(得分:1)

Picasso是一种非常好的加载图片的方法,因为它具有缓存功能,我仍然建议您阅读此answer,然后根据您的具体需求决定使用哪个选项。< / p>

答案 1 :(得分:1)

你根本不能毫不拖延地做到这一点。下载速度取决于互联网连接和设备,因此必须存在一些延迟,除非您提前预先加载一页图像(大多数应用程序都是这样做的)。但即使这样,快速滚动也可能会造成一些延迟。

我建议 Glide 。 它比毕加索要快得多。它比Picasso更好地处理下载到内存和缓存利用率。它可以更好地使用GIF,并防止令人讨厌的OutOfMemoryError。当然,您可以加载占位符,直到图像加载等。

它甚至推荐给谷歌。

干杯