android 如何在Jetpack组合中加载一个屏幕广告

bq3bfh9z  于 2023-02-02  发布在  Android
关注(0)|答案(3)|浏览(145)

这是我的代码:

AndroidView(
        modifier = modifier,
        factory = {
            val view =
                LayoutInflater.from(context).inflate(R.layout.native_ad, null, true)
            val adView = view.findViewById<TemplateView>(R.id.medium_ad_template)
            
            adView.apply {
                AdLoader.Builder(context, context.getString(AR.string.native_unit_id))
                    .forNativeAd { nativeAd ->
                        setStyles(NativeTemplateStyle.Builder().build())
                        setNativeAd(nativeAd)
                    }
                    .build()
                    .loadAd(request)
            }

            view
        }
    )

native_ad.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.ads.nativetemplates.TemplateView
        android:id="@+id/medium_ad_template"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:gnt_template_type="@layout/gnt_medium_template_view" />
</LinearLayout>

广告不断刷新屏幕导航
我尝试在第一次加载时设置一个标记,并不断检查它以查看广告是否已经加载,但是视图刷新了,标记重置为默认值

jtw3ybtb

jtw3ybtb1#

在您的情况下,我认为视图是重新创建的,因为当您更改屏幕以停止尝试rememberSaveable时,您的标志值被重置,如下所示。

rememberSaveable类似于remember,但存储的值可以在进程死亡或配置更改后继续存在。

val flag: MutableState<Boolean> = rememberSaveable { mutableStateOf(false) }
  LaunchedEffect(key1 = flag ){
       AndroidView(...)
  }

我希望它能起作用

kmpatx3s

kmpatx3s2#

它看起来像你需要一些标志,将记住,将允许控制不再重新加载广告。所以你有没有检查与rememberUpdatedState
以下是相同文档链接
https://developer.android.com/jetpack/compose/side-effects#rememberupdatedstate

wmomyfyw

wmomyfyw3#

根据我对你的问题的理解,副作用是你需要的。把AndroidView方法放在一个副作用块中,并定义你想要更新的块。

LaunchedEffect(key1 = <On change of this your block is recomposed>){
       AndroidView(...)
  }

注意:如果你不想更新区块,那么只需在启动效果中用一个字符串代替键。

相关问题