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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:09