RecyclerView中使用无限轮播ViewPager的问题
来源:互联网 发布:课件录制软件 编辑:程序博客网 时间:2024/05/16 19:32
1.在首页做水平广告轮播时,一般需要在RecycleView中嵌套ViewPager,在处理滚动时ViewPager可见开启轮播,ViewPager不可见时暂停轮播
2.Activity onPause时暂停轮播,onResume时开启轮播,Fragment同理
直接上代码
@Overrideprotected void onResume() { super.onResume(); if (linearLayoutManager.findFirstVisibleItemPosition() == 0){ RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder(recyclerView.getChildAt(0)); if(viewHolder instanceof CustomAdapter.CustomViewHolder){ System.out.println("onResume"); customAdapter.startVPTurning((CustomAdapter.CustomViewHolder) viewHolder); } }}@Overrideprotected void onPause() { super.onPause(); if (linearLayoutManager.findFirstVisibleItemPosition() == 0){ RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder(recyclerView.getChildAt(0)); if(viewHolder instanceof CustomAdapter.CustomViewHolder){ System.out.println("onPause"); customAdapter.stopVPTurning((CustomAdapter.CustomViewHolder) viewHolder); } }}public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder>{ int currentItem; public void stopVPTurning(CustomViewHolder holder){ if (holder.itemView instanceof ConvenientBanner){ System.out.println("stopVPTurning"); currentItem = ((ConvenientBanner) holder.itemView).getCurrentItem(); ((ConvenientBanner) holder.itemView).stopTurning(); } } public void startVPTurning(CustomViewHolder holder){ if (holder.itemView instanceof ConvenientBanner){ System.out.println("startVPTurning"); ((ConvenientBanner) holder.itemView).startTurning(2000); } } @Override public void onViewAttachedToWindow(CustomViewHolder holder) { super.onViewAttachedToWindow(holder); if (holder.itemView instanceof ConvenientBanner){ startVPTurning(holder); } } @Override public void onViewDetachedFromWindow(CustomViewHolder holder) { super.onViewDetachedFromWindow(holder); if (holder.itemView instanceof ConvenientBanner){ stopVPTurning(holder); } } @Override public void onViewRecycled(CustomViewHolder holder) { super.onViewRecycled(holder); } @Override public void onBindViewHolder(CustomViewHolder holder, int position) { if (getItemViewType(position) == 0){ holder.itemView.setLayoutParams(new RecyclerView.LayoutParams( RecyclerView.LayoutParams.MATCH_PARENT, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,200, MainActivity.this.getResources().getDisplayMetrics()))); ConvenientBanner banner = holder.itemView.findViewById(R.id.convenientBanner); banner.setPages(new CBViewHolderCreator<LocalCBHolder>() { @Override public LocalCBHolder createHolder() { return new LocalCBHolder(); } },imageList); banner.setcurrentitem(currentItem); System.out.println("onBindViewHolder"); }else{ Glide.with(MainActivity.this).load(twoImageList.get(position)) .into((ImageView) holder.itemView); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,TwoActivity.class)); } }); } }
测试时发现在模拟器上在onBindViewHold时开启轮播,在onViewRecyclered时关闭轮播,可行,但运行在真机上滚动到ViewPager不可见时不会触发onViewRecyclered
可见时也不会触发onBindViewHolder,而放在onViewAttachedWindow和onViewDetchedFromWindow就都会触发了,不知道为什么?
onViewAttachedToWindow
阅读全文
0 0
- RecyclerView中使用无限轮播ViewPager的问题
- ViewPager的无限轮播
- Viewpager的无限轮播
- viewpager的无限轮播
- Viewpager的无限轮播!!!
- ViewPager的无限轮播
- ViewPager的无限轮播
- ViewPager的无限轮播
- Android中可无限循环轮播的ViewPager
- 使用ViewPager实现自动无限循环的轮播
- RecyclerView的上拉加载下拉刷新和viewpager自动有点无限轮播
- 使用RecyclerView + ViewPager 实现轮播广告的两个Bug
- viewpager无限轮播
- Viewpager无限轮播
- Viewpager无限轮播
- ViewPager无限轮播
- ViewPager无限轮播
- ViewPager无限轮播
- poj 1976 01背包
- 学习笔记TF031:实现VGGNet
- gradle疑问
- JAVA多线程和并发基础面试问答
- visual studio code 与github集成(整合)
- RecyclerView中使用无限轮播ViewPager的问题
- 清理SQLServer数据库日志
- leveldb源码分析四
- 登陆页面的html设置
- java文档注释
- oracle dg打开备库为读写数据库,慎重!
- HDU-6034 Balala Power!
- 深入理解Java中的final关键字(转)
- 如何判断工作好坏