Android中如何通过广告监听器跨Activity设置按钮可见性
看起来你已经找对了核心思路——通过插屏广告的点击事件传递参数,在AdActivity里根据参数控制按钮显示!我帮你把代码整理得更规范,同时补充一些细节避免踩坑:
完整实现代码与说明
MainActivity 代码优化
这里补充了插屏广告的初始化逻辑,同时优化了广告生命周期的处理:
public class MainActivity extends AppCompatActivity { private AdView mAdview; private InterstitialAd interstitialAd; private Button button1, button3; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化AdMob SDK MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); // 初始化横幅广告 mAdview = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdview.loadAd(adRequest); // 初始化插屏广告(使用测试ID,正式发布替换为你的广告单元ID) interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); interstitialAd.loadAd(new AdRequest.Builder().build()); // 绑定视图控件 button1 = findViewById(R.id.button1); button3 = findViewById(R.id.button3); webView = findViewById(R.id.webView); // Button1点击逻辑:优先显示插屏广告,未加载则直接跳转 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (interstitialAd.isLoaded()) { interstitialAd.show(); } else { Intent intent = new Intent(MainActivity.this, AdActivity.class); startActivity(intent); } } }); // 插屏广告监听器:点击广告后跳转并传递显示按钮的参数 interstitialAd.setAdListener(new AdListener() { @Override public void onAdClicked() { super.onAdClicked(); Intent nextActivity = new Intent(MainActivity.this, AdActivity.class); Bundle bundle = new Bundle(); bundle.putInt("VAL", 1); nextActivity.putExtras(bundle); startActivity(nextActivity); } // 广告关闭后重新加载,提升下次展示的成功率 @Override public void onAdClosed() { super.onAdClosed(); interstitialAd.loadAd(new AdRequest.Builder().build()); } }); } }
AdActivity 代码优化
这里增加了空指针防护,避免无参数传递时崩溃:
public class AdActivity extends AppCompatActivity { private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ad); button2 = findViewById(R.id.button2); // 建议直接在布局文件设置android:visibility="gone",默认隐藏按钮 // 获取传递的参数,先判断Bundle是否为空 Bundle bun = getIntent().getExtras(); if (bun != null) { int val = bun.getInt("VAL", 0); // 设置默认值0,防止无参数时出错 if (val == 1) { button2.setVisibility(View.VISIBLE); } } } }
关键注意事项
- 参数安全:一定要判断
Bundle是否为空,同时给getInt设置默认值,避免用户直接跳转(未点击广告)时出现空指针异常。 - 广告ID替换:代码中使用的是AdMob官方测试ID,正式发布前务必替换成你自己的广告单元ID。
- 广告生命周期:添加
onAdClosed方法重新加载广告,能让用户下次点击按钮时更快展示插屏广告。 - 布局优化:直接在AdActivity的布局文件中给button2设置
android:visibility="gone",减少代码冗余。
内容的提问来源于stack exchange,提问作者Aryan Samthaan
相关产品推荐
相关产品推荐

