Android Compose中获取Context

前言

当前版本: 1.0.0-alpha11

写代码时想在click事件里弹个Toast,无奈发现如下这段代码无法通过编译,事实上是Compose里这种引用的写法是不支持的。
Android Compose中获取Context_第1张图片

Button(onClick = {
    Toast.makeText(this@MainActivity, "哈哈哈哈", Toast.LENGTH_SHORT).show()
}) {
    Text(text = "点我")
}

发车

先是网上搜了一番,在Stack Overflow上搜到了一篇 How to get Context in Jetpack Compose,结果是直接性的得到了三个非常雷人的答案,就像是一个文件被三次命名的感觉,着实被吓了一跳。

答案1:
Android Compose中获取Context_第2张图片

答案2和3
Android Compose中获取Context_第3张图片

兴许是Compose处于初期,更新太快,就连上面的文档地址都失效了。
Android Compose中获取Context_第4张图片

结论

挨个试了一番,最终发现只有AmbientContext.current能用,根据 Compose官方文档 的示例,应该就没错了
Android Compose中获取Context_第5张图片

代码修改一下就行了

Button(onClick = {
    Toast.makeText(AmbientContext.current, "哈哈哈哈", Toast.LENGTH_SHORT).show()
}) {
    Text("点我")
}

据我发现早期版本context只能在拥有ColumnScopeRowScopeBoxScope一类上下文的代码块里获取,刚升级到此版本后发现就不受限了,在任何地方都能获取。
顺便说一句,每个版本的改动是真的大。。。

你可能感兴趣的:(Kotlin,Jetpack,Android技术,android,Compose,jetpack,compose)