ActivityViewModel 和惰性 ViewModelProvider 之间的区别?
我见过两种初始化视图模型的方法:
private val someViewModel: SomeViewModel by activityViewModels()
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
我知道lazy仅在需要时才初始化 ViewModel,这activityViewModels对于在片段之间共享数据很有用,但除此之外还有什么区别?
Android 文档说其activityViewModels范围仅限于 Activity,但这是否意味着如果在同一 Activity 内的多个片段中使用相同的视图模型,activityViewModels并且只创建一个在所有片段之间共享的实例?
ModalDrawer()a和之间到底有什么区别Scaffold(DrawerContent)?我似乎记得在某处读到过它ModalDrawer()包含导航组件。我还认为我读到您不能使用 with ModalDrawer,Scaffold或者它们不能很好地协同工作。
您什么时候想使用其中一种而不是另一种?
我正在为自己编写一个简单的应用程序,以将 RSS 提要显示为项目列表,并认为这是一个了解@Compose lazyColumn. 我对它的代码之少感到震惊,没有 Adapter,没有 ViewHolder,没有 xml。令人惊讶的精简。
但是,如何将其设置为与Room Database使用协程从数据库中提取数据之类的情况一起工作呢?这里的官方文档讨论了rememberCoroutineScope()但没有解释在哪里定义它。将协程放置在 Surface 定义中感觉很奇怪,这可能就是它不起作用的原因。它会产生一个:@Composable invocations can only happen from the context of a @Composable function错误。
这需要通过a 来完成吗ViewModel?在现实世界中,存储库中的数据无论如何都将来自ViewModel,但现在我只想显示从互联网上提取的简单项目列表(即需要协程)。但是你如何处理ViewModel/Database 中的LiveDataor 呢?List<String>
有谁知道如何设置这个?我觉得这应该不难,但我不知道从哪里开始寻找答案。
前任:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyAppTheme {
val composeScope = rememberCoroutineScope()
Surface(color = MaterialTheme.colors.background) {
composeScope.launch{ // do network call
RssList(RssFetcher.fetchRss()) // how do you make …Run Code Online (Sandbox Code Playgroud)