1.滑动冲突
RV嵌套RV导致滑动冲突,内部滑动失效。
解决方法:滑动冲突解决
2.父RV与子RV竞争焦点导致展开某一项时向上展开。
解决方法:在xml中父RV添加android:descendantFocusability="blocksDescendants"禁止子RV竞争焦点即可。
3.父RV调用notifyDataSetChanged()时,子RV的数据会跳回顶部第一条数据,这是因为RV的item在竞争焦点导致,如果是单层RV的话,可以在itm的父布局添加android:descendantFocusability="blocksDescendants"禁止焦点,但是嵌套RV时就会失效,这是就要用另外一种办法,记录RV上次滑到的位置,刷新数据后回到原位置即可。
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
holder.bigFileRecyclerView.setLayoutManager(linearLayoutManager);
holder.bigFileRecyclerView.setAdapter(bigFileItemAdapter);
holder.bigFileRecyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int i, int i1, int i2, int i3) {
if (linearLayoutManager instanceof LinearLayoutManager) {
View firstView = linearLayoutManager.getChildAt(0);//第一个可见的item
offset = firstView.getTop();//第一个可见item的偏移量
lastPosition = linearLayoutManager.getPosition(firstView);
}
}
});
Log.d(TAG, "findLastCompletelyVisibleItemPosition = " + lastPosition + "offser = " + offset);
linearLayoutManager.scrollToPositionWithOffset(lastPosition, offset);//跳到该位置
这样就可以解决跳到顶部的原因了。这个方法也可以用到需要记录位置的地方。