【问题标题】:How to navigate from a composable to an activity or a fragment in Jetpack Compose?如何在 Jetpack Compose 中从可组合导航到活动或片段?
【发布时间】:2020-12-01 09:40:01
【问题描述】:

在可组合项和活动之间进行导航的方式有哪些,反之亦然? 我可以使用 StartActivity(..) 方法还是唯一的方法是创建 Screens 和 NavController?

【问题讨论】:

  • 要让一个可组合的活动开始,您可以使用ContextAmbient 获取Context。您也许可以使用 Navigation for Compose 创建一个同时使用 activity()composable() 目的地的导航图,尽管我还没有尝试过。
  • 使用 'ContextAmbient.current' 给出 Intent 但需要上下文。你能举个例子吗?
  • 不,ContextAmbient provides a Context。虽然它似乎被重命名为AmbientContext,基于the source code
  • @CommonsWare,请参考图片
  • 我不知道您要调用什么 startActivity() 函数。该错误表明您正在向它传递一个Intent,并且它需要一个Context(至少作为第一个参数)。您的 Intent 来自您正在调用的 Intent() 构造函数。我期待你做val context = ContextAmbient.current; context.startActivity(Intent(context, ListActivity::class.java))(这里使用分号只是因为 Stack Overflow cmets 无法处理换行符)。

标签: android android-jetpack android-jetpack-navigation android-jetpack-compose


【解决方案1】:

在较新版本的 compose 中使用 LocalContext
在旧版本(1.0.0-alpha08 及之前)中使用AmbientContext:

@Composable
fun MainScreen() {
    val context = LocalContext.current

    Button(onClick = {
        context.startActivity(Intent(context, ListActivity::class.java))
    }) {
        Text(text = "Show List")
    }
}

【讨论】:

    【解决方案2】:

    这是我通常的做法(并将值传递给另一个活动):

    val context = LocalContext.current
    ...
    onClick = {
        val intent = Intent(context, ListActivity::class.java)
        intent.putExtra(YourExtraKey, YourExtraValue)
        context.startActivity(intent)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      相关资源
      最近更新 更多