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
相关产品推荐
相关产品推荐

