Kotlin中onAdDismissedFullScreenContent内创建Intent跳转报错如何解决?
错误原因
编译报错的核心是Intent构造参数类型不匹配:
- 实例化
Intent的第一个参数需要传入Context类型的上下文对象 - 你在匿名内部类
FullScreenContentCallback中直接使用this,此时this指向的是当前FullScreenContentCallback实例,并非Activity/Fragment的上下文,因此触发类型错误。
除此之外你的代码还存在两个逻辑隐患:
- 先调用
show()展示广告再设置回调,可能出现广告展示完成时回调还未注册,导致无法触发跳转 - 没有处理
mInterstitialAd为空(广告未加载完成)的场景,此时点击控件不会触发任何跳转
修复方案
如果你在Activity中写这段代码
把代码中的this替换为this@你的Activity类名即可,比如你的Activity类名为HomeActivity,就写this@HomeActivity,完整代码如下:
FalgQuizImageView.setOnClickListener { mInterstitialAd?.let { ad -> // 先注册回调再展示广告,避免回调漏触发 ad.fullScreenContentCallback = object: FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { // 广告用完后置空,避免重复使用旧广告实例 mInterstitialAd = null val intent = Intent(this@HomeActivity, QuizQuestionsCar::class.java) startActivity(intent) } override fun onAdFailedToShowFullScreenContent(adError: AdError?) { mInterstitialAd = null val intent = Intent(this@HomeActivity, QuizQuestionsCar::class.java) startActivity(intent) } } ad.show(this@HomeActivity) } ?: run { // 广告未准备好时直接跳转 val intent = Intent(this@HomeActivity, QuizQuestionsCar::class.java) startActivity(intent) } }
如果你在Fragment中写这段代码
把上下文替换为requireContext()即可:
FalgQuizImageView.setOnClickListener { mInterstitialAd?.let { ad -> ad.fullScreenContentCallback = object: FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { mInterstitialAd = null val intent = Intent(requireContext(), QuizQuestionsCar::class.java) startActivity(intent) } override fun onAdFailedToShowFullScreenContent(adError: AdError?) { mInterstitialAd = null val intent = Intent(requireContext(), QuizQuestionsCar::class.java) startActivity(intent) } } ad.show(requireActivity()) } ?: run { val intent = Intent(requireContext(), QuizQuestionsCar::class.java) startActivity(intent) } }
内容的提问来源于stack exchange,提问作者amalm9479
相关产品推荐
相关产品推荐

