kaleai/CommonAdapter

如果仅仅有footview,在界面第一次添加数据时,会自动滚动到底部!!

Opened this issue · 2 comments

复现路径:
初始化不设置数据,仅仅设置底部

异步加载网络,调用list的addAll方法添加数据

使用的是 ObservableArrayList

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

应该跟这行代码有关系 adapter.notifyItemRangeInserted(0, 25); ,换成 adapter.notifyDataSetChanged 试一试?