【问题标题】:How to load one ad for screen in Jetpack Compose如何在 Jetpack Compose 中为屏幕加载一个广告
【发布时间】:2023-01-31 19:25:23
【问题描述】:

这是我的代码:

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>

广告在屏幕导航上不断刷新

我尝试在第一次加载时设置一个标签并继续检查它以查看广告是否已加载,但视图已刷新且标签重置为默认值

【问题讨论】:

  • 您能否指定问题并添加一些屏幕截图?

标签: android admob android-jetpack-compose android-jetpack


【解决方案1】:

看起来您需要一些可以记住的标志,以便控制不再重新加载广告。所以你检查过rememberUpdatedState

这是相同文件的链接

https://developer.android.com/jetpack/compose/side-effects#rememberupdatedstate

【讨论】:

    【解决方案2】:

    根据我对你的问题的理解,副作用就是你在这里需要的。将 AndroidView 方法放在 Side effect 块中,并定义您想要更新块的内容。

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

    注意:如果您不希望块更新,则只需在启动效果中放置一个字符串代替键。

    【讨论】:

      【解决方案3】:

      在你的情况下,我认为视图被重新创建,因为你的标志值在你更改屏幕以停止尝试时被重置记得保存如下。

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

      【讨论】:

        猜你喜欢
        • 2022-11-07
        • 2023-01-24
        • 1970-01-01
        • 2020-12-05
        • 2022-12-04
        • 2021-09-02
        • 2022-07-11
        • 1970-01-01
        • 2021-10-27
        相关资源
        最近更新 更多