android - 在jetpack compose中使用不是顶级乐趣的反模式吗?
问题描述
我是jetpack compose的初学者。在 codelabs 之后,我发现他们只使用顶级函数教我。我可以在Activity中使用可组合功能,但是我找不到使用这种方式的人。我想知道哪个是最佳实践。
我的代码
class RecyclerViewActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp {
Test()
}
}
}
@Composable
fun MyApp(content: @Composable () -> Unit) {
ComposeDemoTheme {
content()
}
}
@Composable
fun Test() {
}
}
代码实验室
class RecyclerViewActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp {
Test()
}
}
}
}
@Composable
fun MyApp(content: @Composable () -> Unit) {
ComposeDemoTheme {
content()
}
}
@Composable
fun Test() {
}
解决方案
您希望按屏幕/视图拆分代码,并且每个屏幕/视图都放在它自己的文件中
通常你不想在你身上有任何可组合的东西Activity
。您可以在内部设置主题和其他上下文变量,setContent
或者MyApp
如果您有太多逻辑将其移动到,但在这种情况下,我会留下您将这个可组合的移动MyApp.kt
到
我通常做这样的结构:
- 屏幕名称:包
- 屏幕.kt
- ScreenRow.kt:如果屏幕有一个列表
- ButtomBar.kt:如果屏幕有按钮栏并且代码不平凡
- ...
因此,通常当您看到您的文件包含太多可组合项时,您会将逻辑上独立的部分移动到其他文件中
推荐阅读
- c++ - 未选中复选框时,有没有办法隐藏按钮?
- sql - 如何在 SQL/Spark/GraphFrames 中进行这种转换
- python-3.x - 使用 urllib 401 Unauthorized 的 ActiveMQ REST 管理 API 身份验证
- c# - 如何在多个连接场景中显示枚举值?
- objective-c - 未能尝试在我的 Swift 项目中使用带有桥接头的 Objective-C 库
- node.js - 使用带有子域的 ExpressJS 路由器
- c# - 在 Asp.Net Core 3.0 中禁用身份验证以进行开发
- android - Firebase 未在 Crashlytics 中显示当前版本
- jhipster - 外部化 application-prod.yml
- amazon-web-services - 提供程序变量的 AWS 无服务器错误 - 尝试将非字符串值填充到变量的字符串中