You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerViewAdapter中Admob插屏广告点击条目不显示问题求助

Admob插屏广告点击RecyclerView条目不展示问题修复方案

核心问题说明

  • 广告单元ID配置错误:代码中给插屏广告用了横幅广告的ID(R.string.admob_banner),会导致广告加载失败
  • 未判断广告加载状态:直接调用show()方法,插屏广告必须加载完成后才能正常展示
  • 跳转逻辑时机错误:触发广告后立即跳转Activity,广告还未渲染就被页面切换打断
  • 缺少广告事件监听:无法处理广告关闭、加载失败等场景,既不符合Admob政策也会导致功能异常
  • 没有预加载下一次广告:插屏广告单次加载只能展示一次,用完后需要重新加载才能供下次点击使用

修改后的完整代码

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

    private Context mContext;
    private List<Anime> mData ;
    RequestOptions option;
    private InterstitialAd interstitialAd;
    // 存储当前点击的条目数据,方便广告关闭后跳转使用
    private Anime currentClickAnime;

    public RecyclerViewAdapter(Context mContext, List<Anime> mData) {
        // 建议传入Activity上下文,不要用ApplicationContext,避免广告展示异常
        this.mContext = mContext;
        this.mData = mData;

        // 初始化插屏广告
        interstitialAd = new InterstitialAd(mContext);
        // !!!注意这里要替换为你自己的插屏广告单元ID,不能用横幅广告的ID
        interstitialAd.setAdUnitId(mContext.getString(R.string.admob_interstitial));
        // 加载广告
        loadInterstitialAd();

        // 设置广告事件监听
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                // 广告关闭后再跳转页面
                gotoWebViewActivity(currentClickAnime);
                // 广告展示完后重新加载下一次广告,方便下次点击使用
                loadInterstitialAd();
            }

            @Override
            public void onAdFailedToLoad(int i) {
                // 广告加载失败时无需额外操作,下次触发会重新尝试加载
            }
        });

        // Request option for Glide
        option = new RequestOptions().centerCrop().placeholder(R.drawable.loading_shape).error(R.drawable.loading_shape);
    }

    // 封装插屏广告加载逻辑
    private void loadInterstitialAd() {
        if (!interstitialAd.isLoaded() && !interstitialAd.isLoading()) {
            interstitialAd.loadAd(new AdRequest.Builder().build());
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view ;
        LayoutInflater inflater = LayoutInflater.from(mContext);
        view = inflater.inflate(R.layout.row_items,parent,false);
        final MyViewHolder viewHolder = new MyViewHolder(view) ;
        viewHolder.view_container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentClickAnime = mData.get(viewHolder.getAdapterPosition());
                view.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.clcik));

                // 先判断广告是否加载完成
                if (interstitialAd != null && interstitialAd.isLoaded()) {
                    interstitialAd.show();
                } else {
                    // 广告没加载完成的话直接跳转,不要让用户等待
                    gotoWebViewActivity(currentClickAnime);
                    // 同时尝试加载下一次广告
                    loadInterstitialAd();
                }
            }
        });

        return viewHolder;
    }

    // 封装跳转WebViewActivity逻辑,避免重复代码
    private void gotoWebViewActivity(Anime anime) {
        Intent i = new Intent(mContext, WebViewActivity.class);
        i.putExtra("action_link",anime.getWebsite_link());
        i.putExtra("puzzle_link",anime.getWebsite_link());
        i.putExtra("arcade_link",anime.getWebsite_link());
        i.putExtra("adventure_link",anime.getWebsite_link());
        i.putExtra("sports_link",anime.getWebsite_link());
        i.putExtra("racing_link",anime.getWebsite_link());
        i.putExtra("zombie_link",anime.getWebsite_link());

        mContext.startActivity(i);
        CustomIntent.customType(mContext,"fadein-to-fadeout");
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Glide.with(mContext).load(mData.get(position).getWebsite_logo()).apply(option).into(holder.img_thumbnail);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView img_thumbnail;
        LinearLayout view_container;

        public MyViewHolder(View itemView) {
            super(itemView);
            view_container = itemView.findViewById(R.id.container);
            img_thumbnail = itemView.findViewById(R.id.thumbnail);
        }
    }
}

额外注意事项

  • 一定要在strings.xml中新增插屏广告的单元ID配置,替换原来的横幅ID
  • 插屏广告的展示频率不要过高,否则可能触发Admob的政策限制
  • 测试阶段建议使用Admob官方提供的测试ID,避免被判定为无效点击

内容的提问来源于stack exchange,提问作者Litu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:27:03