当前位置:   article > 正文

纵向RecyclerView包含NestedScrollVie,NestedScrollView中包含横向Recycler中水平滑动问题_nestedscrollview 水平滚动

nestedscrollview 水平滚动

如题目所示,问题再现:

当滑动到第二个的时候,图片下面的小圆点就不起作用了。

源代码是这样写的:

  1. final LinearLayoutManager manager = new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false);
  2. holder.rv_workPics.setLayoutManager(manager);
  3. holder.rv_workPics.setAdapter(new PicBrowserAdapter(context,work.getPicLists()));
  4. holder.bi_picBanner.setNumber(work.getPicLists().size());
  5. PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
  6. holder.rv_workPics.setOnFlingListener(null);
  7. pagerSnapHelper.attachToRecyclerView(holder.rv_workPics);
  8. holder.rv_workPics.addOnScrollListener(new RecyclerView.OnScrollListener() {
  9. @Override
  10. public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
  11. super.onScrollStateChanged(recyclerView, newState);
  12. if (newState == RecyclerView.SCROLL_STATE_IDLE && recyclerView.getChildCount() > 0 ){
  13. int i = manager.findFirstVisibleItemPosition() % urls.size();
  14. holder.bi_picBanner.setPosition(i);
  15. }
  16. }
  17. });

问题就出现在代码的倒数第二行manager.findFirstVisibleItemPosition() % urls.size();这里不应该用manager在去获取当前位置,因为在加载内层RecyclerView的时候实例了多个LinearLayoutManager,在上下滚动之后,应该通过当前RV来确定当前的位置,而不是通过上面的manager,因此需要将倒数第二行代码替换为:

int i = ((RecyclerView.LayoutParams) recyclerView.getChildAt(0).getLayoutParams()).getViewAdapterPosition();

这样就可以保证,获取的就是当前的RV中itemView的位置。

源码中回调的

onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState),中recyclerView参数就是为了保证确认是当前RV,从此下手来解决问题。

希望帮助到大家。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/174725
推荐阅读
相关标签
  

闽ICP备14008679号