【问题标题】:Jetpack Compose update ad banner in Android ViewJetpack Compose 在 Android 视图中更新广告横幅
【发布时间】:2021-10-26 17:42:11
【问题描述】:

在 Jetpack Compose 中,我使用 AndroidView 显示来自一家名为 Smart.IO 的公司的广告横幅。

此时横幅在首次初始化时显示,但当用户返回其显示的屏幕时无法重新组合。

我知道在撰写视图中使用 update 函数,但我找不到任何可以用来在 Banner 上更新以触发重组的参数。

AndroidView(
    modifier = Modifier
        .fillMaxWidth(),
    factory = { context ->
        Banner(context as Activity?)
    },
    update = {
        
    }
)

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    这可能是库错误。您可以检查此视图在普通 Android XML 中是否正常运行。

    或者你可能需要使用这个库中的一些 API,我个人还没有找到任何像样的文档或 Android SDK 源代码。


    无论如何,这里是您可以更新视图的方法。

    您可以跟踪生命周期事件,如this answer 所示,并且仅在ON_RESUME 期间显示您的视图。这将在暂停时将其从屏幕上移除,并使其在恢复时创建一个新视图:

    val lifeCycleState by LocalLifecycleOwner.current.lifecycle.observeAsSate()
    if (lifeCycleState == Lifecycle.Event.ON_RESUME) {
        AndroidView(
            modifier = Modifier
                .fillMaxWidth(),
            factory = { context ->
                Banner(context as Activity?)
            },
            update = {
    
            }
        )
    }
    

    Lifecycle.observeAsSate:

    @Composable
    fun Lifecycle.observeAsSate(): State<Lifecycle.Event> {
        val state = remember { mutableStateOf(Lifecycle.Event.ON_ANY) }
        DisposableEffect(this) {
            val observer = LifecycleEventObserver { _, event ->
                state.value = event
            }
            this@observeAsSate.addObserver(observer)
            onDispose {
                this@observeAsSate.removeObserver(observer)
            }
        }
        return state
    }
    

    【讨论】:

    • 感谢您的示例,我可以看到这使得可组合区域重新组合,因为它将我的其他可组合区域向下推到屏幕上,但横幅内的实际数据不会加载。但是,如果我在屏幕上触发一个奇怪的警报对话框,数据确实会加载。
    • @alfietap 你可以在else中放一些相同大小的空Box来防止这种跳转。至于根本问题,您可能需要联系 SDK 支持,因为您在 Compose 部分中所做的一切都是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2014-01-07
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多