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

Admob插页广告多按钮点击跳转错误问题求助

问题分析与解决方案

你的问题核心在于重复设置AdListener导致覆盖:每次给按钮绑定点击事件时,你都重新给interstitialAd设置了新的AdListener,这会直接替换掉之前的监听逻辑。最后不管点击哪个按钮,广告关闭后都会执行最后一次设置的onAdClosed方法,所以才会出现所有按钮都跳转到同一个Activity的情况。

下面是修复后的完整方案:

步骤1:添加成员变量保存目标Activity

在你的Activity类里定义一个成员变量,用来记录当前点击按钮要跳转的目标Activity:

private InterstitialAd interstitialAd;
private Class<?> targetActivity; // 新增:保存目标Activity类

步骤2:统一设置一次AdListener

初始化广告时只设置一次AdListener,在onAdClosed回调里根据保存的targetActivity进行跳转,不要每次按钮点击都重新设置:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_topics_list);

    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId("ca-app-pub-1164579427694627/2090370128");

    // 只设置一次AdListener,复用这个逻辑
    interstitialAd.setAdListener(new AdListener(){
        @Override
        public void onAdClosed() {
            // 检查目标Activity是否有效,然后跳转
            if (targetActivity != null) {
                startActivity(new Intent(topics_list.this, targetActivity));
                targetActivity = null; // 跳转后清空,避免后续误触发
            }
            // 重新加载广告,为下一次点击做准备
            interstitialAd.loadAd(new AdRequest.Builder().build());
        }

        // 可选:添加广告加载失败的重试逻辑,提升广告展示率
        @Override
        public void onAdFailedToLoad(int errorCode) {
            interstitialAd.loadAd(new AdRequest.Builder().build());
        }
    });

    // 初始化加载广告
    interstitialAd.loadAd(new AdRequest.Builder().build());

步骤3:修改按钮点击逻辑

每个按钮的点击事件里,先给targetActivity赋值对应的目标Activity,再触发广告展示:

// 按钮2(跳转到topic_one)
    bt2 = (Button) findViewById(R.id.button2);
    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            targetActivity = topic_one.class; // 绑定当前按钮的目标Activity
            if (interstitialAd.isLoaded()){
                interstitialAd.show();
            } else {
                // 广告未加载完成,直接跳转目标页面
                startActivity(new Intent(topics_list.this, topic_one.class));
            }
        }
    });

    // 按钮3(跳转到topic_two)
    bt3 = (Button) findViewById(R.id.button3);
    bt3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            targetActivity = topic_two.class; // 绑定当前按钮的目标Activity
            if (interstitialAd.isLoaded()){
                interstitialAd.show();
            } else {
                startActivity(new Intent(topics_list.this, topic_two.class));
            }
        }
    });

    // 其他8个按钮按照同样的逻辑修改即可...
}

额外优化:避免内存泄漏

在Activity销毁时,记得清理广告资源:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (interstitialAd != null) {
        interstitialAd.setAdListener(null);
        interstitialAd = null;
    }
}

这样修改后,每个按钮点击时都会把对应的目标Activity保存到targetActivity变量中,广告关闭后就会跳转到正确的页面,不会再出现统一跳转的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:13