如果仅仅有footview,在界面第一次添加数据时,会自动滚动到底部!!
Opened this issue · 2 comments
kaleai commented
复现路径:
初始化不设置数据,仅仅设置底部
异步加载网络,调用list的addAll方法添加数据
使用的是 ObservableArrayList
kaleai commented
dataBinding提供的ObservableArrayList的addAll方法最终会触发,adapter的
public void onItemRangeInserted(ObservableList<T> sender, int positionStart, int itemCount) {
notifyItemRangeInserted(positionStart, itemCount);
notifyItemRangeChanged(positionStart, itemCount);
}
属于在尾部插入了一堆数据,故我模拟了最正常的方式:
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
data.addAll(DataManager.loadData(getBaseContext(), 25));
adapter.notifyItemRangeInserted(0, 25);
}
}, 1000);
发现结果还是会定位到底部的item,说明插入后recyclerView的机制就是会定位到插入的item处。
这个问题和有没有footer无关,可以自行测试。
如果有了header,这个问题确实就可以解决了具体原因未知,可能是header的出现,阻碍了其滚动到新插入item位置的动作。
如果要正常解决这个问题,可以采用下列的list,调用其reset方法即可。
https://github.com/tianzhijiexian/DBinding/blob/master/dbindinglib/src/main/java/kale/dbinding/util/ObservableArrayList.java
humanheima commented
应该跟这行代码有关系 adapter.notifyItemRangeInserted(0, 25); ,换成 adapter.notifyDataSetChanged 试一试?