我的情况如下:我有一个我想插入数据的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
已更新?
答案 0 :(得分:-1)
行后
_adapter.add(response.getData());
添加这个
_adapter.notifyItemChanged(_adapter.getItemCount() - 1);