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

原创粉丝点击