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

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

我太累了,无法在两天内搜索这个问题,但我得到了错误的答案,我实施了RecycleView,效果很好,但我的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();

}

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


ps:如果项目的照片url已知,您可以使用
Glide
Picasso
库。

尽管我不建议您使用此“解决方案”,因为它破坏了使用RecyclerView的原始目的,所以可以让RecyclerView一次为每个项目调用onBindViewHolder。要使其工作,只需在嵌套滚动视图中设置RecyclerView。

您可以尝试在嵌套滚动视图中嵌入
RecyclerView
,并且不要忘记禁用
RecyclerView
的嵌套
scrollview
。这样,即使违反了
recyclerview
的目的,也会立即加载所有项目

使用滑翔。发布您的
onBindViewHolder的实现
以及加载媒体时使用的任何方法/AsyncTask/任何方法。我需要知道你是如何加载图像和视频的,然后我才能帮助你。@Leo谢谢你的帮助。问题编辑Does
下载照片
是否接受任何参数?像URL?是的。downloadPhoto()从internet(url)下载任何照片。事实上,我在下载照片时被耽搁了。是的,我知道这一点。这意味着不可能一次为所有项目(可见或不可见)调用onBindViewHolde?您可以一次加载,但应该避免,因为位图占用大量内存。我知道此警告。你能告诉我如何一次加载所有照片吗?你确定要将所有照片加载到内存中吗?如果是这样,你可以在构建适配器时加载所有照片。这意味着我们不能为不可见项调用onBind。谢谢:)这是真的,但是@philipp poropat您知道为什么会有这种行为吗?@ror因为您将recyclerView的高度设置为wrapContent-它加载所有视图并测量其高度。