繁体   English   中英

如何在 Jetpack Compose 中获取上下文

[英]How to get Context in Jetpack Compose

fun createListItem(itemIndex: Int) {
Padding(left = 8.dp, right = 8.dp, top = 8.dp, bottom = 8.dp) {
    FlexRow(crossAxisAlignment = CrossAxisAlignment.Center) {
        expanded(1.0f) {
            Text("Item $itemIndex")
        }
        inflexible {
            Button(
                "Button $itemIndex",
                style = ContainedButtonStyle(),
                onClick = {
                    Toast.makeText(
                        this@MainActivity,
                        "Item name $itemIndex",
                        Toast.LENGTH_SHORT
                    ).show()
                })

        }
    }
  }
}

我尝试以正常方式制作吐司。 但我得到了错误我尝试了很多倍数来源但失败了。

2021 年 3 月更新:之前的答案已被弃用。 您现在应该使用:

val context = LocalContext.current

上一个答案供参考:

您可以使用定义环境上下文访问ambientContext

例子:

val context = ContextAmbient.current

ContextAmbientAmbientContext已弃用

您可以将它们替换为

val context = LocalContext.current

ContextAmbient.current alpha-09起已弃用。

AmbientContext.current 已弃用。 我认为从alpha-11开始。

LocalContext.current是您现在如何在可组合中获取上下文的方式。

执行此操作的方法已更新。 下雪了:

val context = LocalContext.current

LocalContext 文档

在 jetpack compose 中获取上下文:

val context = ContextAmbient.current

在 0.1.0-dev14 上工作

如何在TOAST中使用它:

@Composable
fun cardViewImplementer(item: Int) {
   val context = ContextAmbient.current
   Card(
     shape = RoundedCornerShape(10.dp),
     modifier = Modifier.padding(10.dp)
   ) {
     Box(
        modifier = Modifier
            .fillMaxWidth()
            .drawShadow(5.dp)
            .clickable(onClick = {
                Toast.makeText(context, "Clicked $item", Toast.LENGTH_SHORT).show()
            }), children = {

        })
}

访问资源

Text("Read this string: "+context.getString(R.string.name))

ContextAmbient.current已被弃用,请改用val context = LocalContext.current

compose_version = '1.0.0-alpha12'问题? AmbientContext现在是LocalContext

我认为您从不以正常方式展示Toast Jetpack Compose 使用自定义Kotlin编译器插件将这些可组合函数转换为应用程序的 UI 元素。 例如, Text() function 由Compose UI library定义。 Jetpack Compose 处于非常早期的开发阶段。 您可以在下面的链接中查看带有示例和集成测试检查的 Jetpack 的所有 repo

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/ui

val context = LocalContext.current
Toast.makeText(context,"Hello Compose",Toast.LENGTH_LONG).show()

LocalContext.current - 是正确的方法。 但问题是你不能在 @Composable function 中使用 LocalContext.current

您需要创建单独的 function 才能使用 Context

示例代码

@Composable
fun DoneButton(){
    val context = LocalContext.current
    Button(onClick = { showToast(context,"Button clicked")}) {
        Text(name = "Done")
    }
}

fun showToast(context: Context, msg:String){
    Toast.makeText(context,msg,Toast.LENGTH_LONG).show()
}

如果您需要从最后一个 Android Studio 模板获取上下文作为 Activity,则有些有用:

val view = LocalView.current
(view.context as Activity).<activity method>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM