RecyclerView和背景请求与大量项目

时间:2016-07-13 01:30:07

标签: android android-recyclerview

我有一个 RecyclerView ,其中有一个大型集合,比如500多个项目。调用onBindViewHolder时,我会生成异步HTTP请求以加载一些数据。

但是当我在列表中快速滚动时,如何取消对不再可见的所有项目的请求?我看到100个请求在后台启动,因为RecyclerView加载的方式,我想我滚动过去的每个项目都会调用onBindViewHolder?

我正在考虑在onBindViewHolder中启动等待500毫秒的请求,如果绑定到它的项仍然在视图中/仍然相同,则启动异步请求。这会有用吗?如果是,那么如何检查项目是否仍然在适配器内?

解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

您可以为OnScrollListener:{/ p>制作RecyclerView

 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 

    }
}

答案 1 :(得分:0)

您可以使用setTag()中的View来保存连接引用,就像这样

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    HttpURLConnection httpURLConnection;
    if (holder.itemView.getTag() != null) {
        httpURLConnection = (HttpURLConnection)holder.itemView.getTag();
        //close the connection
        httpURLConnection.disconnect();
    }
    // create your connection
    httpURLConnection = new HttpURLConnection();
    holder.itemView.setTag(httpURLConnection);
}