即使在Handler

时间:2016-04-15 06:23:38

标签: android android-recyclerview

我的情况如下:我有一个我想插入数据的RecyclerView。

我逐个添加数据,直到RecyclerView已满。数据来自网络服务。

这是我使用的代码:

@Override
public void receive(Response response) {

    _adapter.add(response.getData());

    new Handler().post(new Runnable() {

        @Override
        public void run() {

            fetchIfNotFull();
        }   
    });
}

private void fetchIfNotFull() {

    if (_layoutManager.findLastVisibleItemPosition() == _layoutManager.getItemCount() - 1)
        fetchData(); // this will call receive(Response) when it's done
}

问题在于,当我运行应用程序时,RecyclerView没有像我期望的那样被填充(但有时会这样!)。

我发现_layoutManager.findLastVisibleItemPosition()并不总是返回正确的值(至少是我期望的值),而_layoutManager.getItemCount()则是,所以不再提取数据......

我认为将调用包装在Handler内会有所帮助,所以它会在下一次布局更新后调用,但它没有做到这一点。

这是奇怪的事情:如果我用1000毫秒调用handler.postDelayed(),它就可以了! (我没有尝试其他值),因为在此之后布局 更新了。但我不喜欢这个解决方案(黑客)。有没有办法确保LayoutManager已更新?

1 个答案:

答案 0 :(得分:-1)

行后

_adapter.add(response.getData());

添加这个

_adapter.notifyItemChanged(_adapter.getItemCount() - 1);