一次性加载android RecyclerView中的所有项目

问题描述 投票:0回答:4

我太累了,不想在两天内搜索这个问题,但我得到了错误的答案,我实现了 RecyclerView 并且效果很好,但是我的 RecycleView 有很多项目,例如照片和视频(例如 Instagram)。这意味着我的适配器将为所有项目调用 onBindViewHolder 以开始下载和加载图像和视频。但 RecycleView 只是在项目可见时(滚动显示它)为每个项目调用 onBindViewHolder 。不可能 ?如果不是的话,Instagram 如何能做到这一点。注意:我不想使用数据库来保存图像和视频

 @Override
public void onBindViewHolder(RecyclerView.ViewHolder h, int position) {

    Log.e("position",position+" ");

    thread t = new Thread(new Runnable(){
       public void run(){
           Bitmap bitmap = downloadPhoto();//it mean photo downloaded and converted to Bitmap
           runOnUiThread(new Runnable(){
               holder.imageView.setImageBitmap(bitmap);
           ));
       }

    });
    t.start();

}
android android-recyclerview
4个回答
5
投票

您可以尝试将

recyclerview
嵌入嵌套滚动视图中,并且不要忘记禁用
scrollview
的嵌套
recyclerview
。这样,所有项目都会立即加载,即使它违反了
recyclerview
的目的。


3
投票

虽然我不建议你使用这个“解决方案”,因为它破坏了使用 RecyclerView 的初衷,但可以让 RecyclerView 一次为每个项目调用 onBindViewHolder。为了让它工作,只需将 RecyclerView 设置在 NestedScrollView 中即可。


1
投票

正如您所描述的,您只想在该项目可见时加载照片。事实上,

RecyclerView
适配器只会在项目出现(可见)时调用
onBindViewHolder
,这样您就可以开始下载照片,然后在照片准备好时更新 UI。现在您不必一次加载所有项目的照片,只需在需要时加载即可。

ps:如果知道该项目的照片网址,您可以使用

Glide
Picasso
库。


0
投票

尝试在滚动之前加载所有图像网址

listItem.forEach{ imageUrl ->
val request = ImageRequest.Builder(context)
                    .data(imageUrl)
                    .build()
context.imageLoader.enqueue(request)
}
© www.soinside.com 2019 - 2024. All rights reserved.