1.在首页做水平广告轮播时,一般需要在RecycleView中嵌套ViewPager,在处理滚动时ViewPager可见开启轮播,ViewPager不可见时暂停轮播
2.Activity onPause时暂停轮播,onResume时开启轮播,Fragment同理
直接上代码
@Override protected 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); } } } @Override protected 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