1

我正在为RecyclerView. 当软件检测到要显示最后一个项目时,它会下载新项目并调用以下函数(在主线程中运行):

int visibleItemCount = numberOfItemsPerRow;
int pastVisiblesItems = ((GridLayoutManager)recyclerView.getLayoutManager()).findLastVisibleItemPosition();
int totalItemCount = mLayoutManager.getItemCount();
if (loading) {
    if ((visibleItemCount+pastVisiblesItems) >= totalItemCount) {
    .
    .
    .

    //After downloading data

    loading = false;
    getActivity().runOnUiThread(new Runnable() {
        public  void  run() {
            mAdapter.notifyDataSetChanged();
        }
    });
}

但是,如果我快速滚动并在接收新数据之前显示最后一项,notifyDataSetChanged()则不起作用。只有当我再次上下滚动以强制呈现新数据时,才会显示这些新数据。

关于什么是错的任何想法?

4

1 回答 1

0

你可以试试

        RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {  
                super.onScrolled(recyclerView, dx, dy);
            }
        });

编辑:

为了让您使用它来确定您使用的正确位置,我敢打赌您的位置不能反映适当的条件:

  • 当视图为空时,最后可见位置将为-1
  • 当视图获得一个元素时,位置将为 0
  • 适配器计数将为 1

编辑2:

我有类似的方法:

  • 搜索在队列中保存数据的线程
  • 按需清空队列
  • 我有适配器

    public class MyAdapter extends RecyclerView.Adapter<ItemCardAdapter.ViewHolder>

  • 在适配器中,我得到了一个列表:

    List<T> _itemList;

    • 我有方法add(item)//addAll(collection)clear()管理项目列表

    • 三种重写方法:

      @Override public int getItemCount() { return _itemList.size(); }

      @Override public void onBindViewHolder(ViewHolder holder, int position) { }

      @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {}

  • 和持有人:

    public class ViewHolder extends RecyclerView.ViewHolder {}

  • 我正在通过 管理数据Adapter.add();clear();然后我Adapter.notifidatasetChanged();在 UI 线程上调用 Runnable 我没有像你这样的问题

您使用哪些库?

我的是:

  • appcompat-v7:22.2.0'
  • 支持-v4:22.2.0'
  • 设计:22.2.0'
  • recyclerview-v7:22.2.0'
  • cardview-v7:22.2.0'
于 2015-07-02T23:37:17.380 回答