立即加载android RecyclerView中的所有项目

时间:2017-11-14 15:38:50

标签: android android-recyclerview

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

}

3 个答案:

答案 0 :(得分:1)

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

ps:如果项目的照片网址已知,您可以使用GlidePicasso库。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

尽管我不建议您使用此“解决方案”,因为它破坏了使用RecyclerView的初衷,但可以让RecyclerView一次为每个项目调用onBindViewHolder。为了使其正常工作,只需在NestedScrollView内设置RecyclerView。