【发布时间】:2020-10-25 16:31:57
【问题描述】:
我想知道如何更改 Jetpack Compose 中的 Appbar 菜单。
在Fragment 的世界中,要实现这一点就是这样做:
class SampleFragment : Fragment() {
override fun onCreate(context: Context) {
super.onCreate(context)
setHasOptionsMenu(true)
}
// Set the R.menu.sampleMenu in the AppBar
override fun onCreateOptionsMenu(menu: Menu) {
...
menuInflater.inflate(R.menu.sampleMenu, menu)
}
// To handle clicks on the menu
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Check id of menu item and process as follow
}
...
}
我想知道如何在 Compose 中做同样的事情。我想有这样的:
// Have a top level state which could be set
var menu by remember { mutableStateOf(emptyList<Menu>()) }
....
TopAppBar {
....
menu.forEach {
TextButton(...)
}
}
....
//and then on my content ill set the `menu` to a value
onCommit {
menu = listOf(Menu1, Menu2, Menu3, ...)
}
我想知道这是否是正确的方法,或者是否有更好的方法。
我很想得到一些意见和建议,非常感谢。
【问题讨论】:
-
“在屏幕之间导航时这样做也有问题”——我们不知道您是如何执行导航的。至少在 Jetpack Navigation 组件支持 Compose 之前,我见过的最常见的方法是“我们在什么屏幕上”有一个顶级状态。对该状态的更改会驱动哪些可组合项呈现屏幕,包括应用栏菜单中的项目。
-
但是当前屏幕仍然如何捕获点击事件?如果只有顶级状态保持是当前屏幕的标识符?
-
一些可组合物负责您的每个屏幕。将状态作为参数传递给那些可组合的函数。这个想法是,对于所有需要状态的分支,状态应该位于最高的公共位置。
-
我有点理解,但有点困惑。你能告诉我一些示例代码吗?我真的很感激。
-
你找到解决办法了吗?
标签: android android-jetpack-compose