我有一些项目的列表,我正在使用Glide
将图像加载到ImageView上。问题是,如果某个特定项目滚动进入屏幕,那是我唯一一次使用Glide
绘制图像。当我在图像加载完成后放置交叉渐变时,这是显而易见的。
我从一开始就知道所需的项目数量和其他一些项目,如页眉和页脚。我正在考虑制作一个非常长的视图来处理所有内容并在onCreate
动态添加这些已知项目,并使用我已经完成的ScrollView
。我目前使用RecyclerView
实现了一种更简单的方法,但我对onBindView
调用的时间有疑问。
我想要的是在屏幕上显示之前加载前5个项目。我希望这将触发我将图像与Glide绑定到ImageView之前在屏幕上完全可见之前的方法。
我遵循了这个tutorial,它不适合我。这是我目前的设置:
mComicListingAdapter = new ComicListingsAdapter(getContext(), Constants.CHAPTERS, (ComicListingsAdapter.Callback) getActivity());
mRecycleViewHomeScreen.setAdapter(mComicListingAdapter);
mRecycleViewHomeScreen.setHasFixedSize(true);
mRecycleViewHomeScreen.setItemViewCacheSize(42);
mRecycleViewHomeScreen.setLayoutManager(pcll);
这在RecyclerView中是否可行?或者我应该尝试动态创建ImageView
并将其附加到父View
,就像我这样做的那样。它看起来很棒,但在我的情况下使用这种方法有很多事情要做。我很好奇我是否可以指示RecyclerView
提前加载n个项目。
谢谢!
答案 0 :(得分:2)
Views
是在运行时动态创建的,您只能通过适配器的onBindViewHolder
方法访问视图项。您希望在将适配器设置为回收器视图之前加载图像。首先调用getItemCount
方法查找项目数,然后调用onCreateViewHolder
方法在RecyclerView
中绘制一行。
因此,RecyclerView
无法在设置任何Adapter
之前访问项目。您需要通过动态创建ImageView
来以其他方式实现此目的。例如。
答案 1 :(得分:1)
我发现了blog post,作者建议扩展LinearLayoutManager并覆盖getExtraLayoutSpace()。
它奏效了。根据在getExtraLayoutSpace()中返回的像素数,预加载了更多项目。
P.S。我尚未检查它如何影响性能,尤其是在棒棒糖之前的设备上。
示例:
cell.buttonDelegate = buttonDelegate