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