赞
踩
如题目所示,问题再现:
当滑动到第二个的时候,图片下面的小圆点就不起作用了。
源代码是这样写的:
- final LinearLayoutManager manager = new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false);
- holder.rv_workPics.setLayoutManager(manager);
- holder.rv_workPics.setAdapter(new PicBrowserAdapter(context,work.getPicLists()));
-
- holder.bi_picBanner.setNumber(work.getPicLists().size());
- PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
- holder.rv_workPics.setOnFlingListener(null);
- pagerSnapHelper.attachToRecyclerView(holder.rv_workPics);
-
- holder.rv_workPics.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
- super.onScrollStateChanged(recyclerView, newState);
- if (newState == RecyclerView.SCROLL_STATE_IDLE && recyclerView.getChildCount() > 0 ){
- int i = manager.findFirstVisibleItemPosition() % urls.size();
-
- holder.bi_picBanner.setPosition(i);
- }
- }
- });
问题就出现在代码的倒数第二行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,从此下手来解决问题。
希望帮助到大家。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。