我正在使用firebaseui FirebaseRecyclerAdapter
的firebase数据库。我跟着这个例子:
https://github.com/firebase/FirebaseUI-Android/tree/master/database
- 除了我正在使用片段。
该应用程序正常工作,我没有任何问题,除了旋转设备时,回收器视图不会恢复其滚动位置,而是重置为顶部项目。 - 例如,用户向下滚动8个项目然后旋转设备。用户应该处于相同的滚动位置,但是位置已经返回到顶部。
我想我可以添加额外的代码来处理这个并滚动到正确的位置,但我从经验中知道RecyclerView
应该自己处理这个问题。 FirebaseRecyclerAdapter
要求我处理这件事吗?
答案 0 :(得分:1)
回答我自己的问题 -
我能够让这个工作的唯一方法是保存这样的状态:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mRvPositionIndex = mLayoutManager.findFirstVisibleItemPosition();
View startView = mRecyclerView.getChildAt(0);
mRvTopView = (startView == null) ? 0 : (startView.getTop() - mRecyclerView.getPaddingTop());
outState.putInt(RV_POS_INDEX, mRvPositionIndex);
outState.putInt(RV_TOP_VIEW, mRvTopView);
}
然后在onCreateView()
,我设置适配器后立即执行此操作
if (savedInstanceState != null) {
mRvPositionIndex = savedInstanceState.getInt(RV_POS_INDEX);
mRvTopView = savedInstanceState.getInt(RV_TOP_VIEW);
mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
public void onItemRangeInserted(int positionStart, int itemCount) {
mLayoutManager.scrollToPositionWithOffset(mRvPositionIndex, mRvTopView);
}
});
}
到目前为止我做了一些测试,但似乎工作正常。如果有人有更好的解决方案,请告诉我。
答案 1 :(得分:0)
我还发现该解决方案即使在正常活动中也能正常工作
在onCreate中:
mDataObserver = new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
mLayoutManager.scrollToPositionWithOffset(mRvPositionIndex, 0);
}
};
myFirebaseRecyclerAdapter.registerAdapterDataObserver(mDataObserver);
不要忘记注销AdapterDataObserver。