我太累了,不能在两天内搜索这个问题,但我得到了错误的答案,我实施了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();
}
答案 0 :(得分:1)
如您所述,您只想在项目可见时加载照片。事实上,RecyclerView
适配器只会在项目出现(可见)时调用onBindViewHolder
,这样您就可以开始下载照片,然后在为您准备好照片时更新UI。而且您现在不会立即加载所有项目的照片,只需在需要时加载。
ps:如果项目的照片网址已知,您可以使用Glide
或Picasso
库。
答案 1 :(得分:1)
您可以尝试将recyclerview
嵌入嵌套滚动视图中,并且不要忘记禁用scrollview
的嵌套recyclerview
。这样,即使违反了recyclerview
的目的,也会立即加载所有项目。
答案 2 :(得分:0)
尽管我不建议您使用此“解决方案”,因为它破坏了使用RecyclerView的初衷,但可以让RecyclerView一次为每个项目调用onBindViewHolder。为了使其正常工作,只需在NestedScrollView内设置RecyclerView。