前言
当前版本: 1.0.0-alpha11
写代码时想在click
事件里弹个Toast
,无奈发现如下这段代码无法通过编译,事实上是Compose里这种引用的写法是不支持的。
Button(onClick = {
Toast.makeText(this@MainActivity, "哈哈哈哈", Toast.LENGTH_SHORT).show()
}) {
Text(text = "点我")
}
发车
先是网上搜了一番,在Stack Overflow上搜到了一篇 How to get Context in Jetpack Compose,结果是直接性的得到了三个非常雷人的答案,就像是一个文件被三次命名的感觉,着实被吓了一跳。
答案1:
答案2和3
兴许是Compose处于初期,更新太快,就连上面的文档地址都失效了。
结论
挨个试了一番,最终发现只有AmbientContext.current
能用,根据 Compose官方文档 的示例,应该就没错了
代码修改一下就行了
Button(onClick = {
Toast.makeText(AmbientContext.current, "哈哈哈哈", Toast.LENGTH_SHORT).show()
}) {
Text("点我")
}
据我发现早期版本context只能在拥有ColumnScope
、RowScope
、BoxScope
一类上下文的代码块里获取,刚升级到此版本后发现就不受限了,在任何地方都能获取。
顺便说一句,每个版本的改动是真的大。。。