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

