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

Admob插页广告仅显示一次且计数器不更新问题求助

问题分析与解决方案

嘿,我帮你排查出代码里导致计数器不更新、广告无法正常更新的核心问题了,咱们一步步来解决:

核心问题点

  • 重复加载布局导致视图重置:你在onAdClosed方法里调用了setContentView(R.layout.activity_main);,这会把当前Activity的布局完全重新渲染一遍——相当于之前的所有视图(包括显示计数的TextView)都被销毁重建了。你刚给count加1,结果布局一刷新,TextView又回到初始状态,自然看不到计数变化。
  • 无效的视图查找操作:每次广告关闭都重新findViewById,再加上布局被重置,这个操作其实是在新的布局实例上执行,完全起不到更新原视图的作用。

修复后的完整代码

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    private InterstitialAd mInterstitialAd;
    private Button watchButton;
    private TextView tv_data; // 全局声明TextView,避免重复查找
    int count = 0;

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

        // 初始化TextView,只执行一次
        tv_data = findViewById(R.id.disCount);
        // 初始显示计数
        tv_data.setText(Integer.toString(count));

        MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        loadInterstitialAd(); // 把加载广告的逻辑抽成独立方法,更清晰

        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                // 先更新计数器并刷新显示
                count++;
                tv_data.setText(Integer.toString(count));
                // 再加载下一个插页广告
                loadInterstitialAd();
            }
        });

        watchButton = findViewById(R.id.button_send);
        watchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    loadInterstitialAd();
                    // 这里可以加个提示,比如Toast.makeText(MainActivity.this, "广告正在加载中", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    // 抽取出加载广告的方法,复用代码
    private void loadInterstitialAd() {
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }
}

关键修复说明

  • 全局持有TextView引用:在onCreate里就初始化TextView,之后直接复用这个引用,不用每次都重新查找,也彻底避免了布局重置带来的视图失效问题。
  • 移除重复的setContentView:删掉onAdClosed里的布局重载代码,这是导致计数器不更新的最核心原因。
  • 调整执行顺序:先更新计数器并刷新TextView显示,再加载下一个广告,逻辑更顺畅合理。
  • 抽取广告加载方法:把重复的加载广告代码抽成单独方法,让代码更简洁、易维护。

这样修改后,用户关闭广告后计数器会正常递增显示,同时广告也会自动加载下一个,完美解决你遇到的两个问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:26