RecyclerView中使用无限轮播ViewPager的问题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值