我有一个 RecyclerView,上面绑定(bind)了一个大集合,比如 500 多个项目。当 onBindViewHolder
被调用时,我发出一个异步 HTTP 请求来加载一些数据。
但是当我快速向下滚动列表时,如何取消对所有不再可见的项目的请求?由于 RecyclerView 的加载方式,我看到 100 多个请求在后台启动,我认为我滚动过去的每个项目都会调用 onBindViewHolder?
我正在考虑在等待 500 毫秒的 onBindViewHolder
中启动一个请求,如果绑定(bind)到它的项目仍在 View 中/仍然相同,则启动异步请求。这行得通吗?如果是这样,那么我如何检查该项目是否仍在适配器中可见?
解决这个问题的正确方法是什么?
最佳答案
你可以为 RecyclerView
创建一个 OnScrollListener
:
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE){
int firstVisibleItem = view.getFirstVisiblePosition();
int lastVisiblePosition = view.getLastVisiblePosition();
//call request from firstVisibleItem to lastVisiblePosition
}
}
关于android - 具有大量项目集合的 RecyclerView 和后台请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341277/