如何解决将ViewModel用于ListView和ListView中的<T>是否合适?
序言
在试图引导Kotlin类实现与Fragments和Activities一起使用的Android ViewModel(和MVVM模式)时,我不清楚各种复杂类之间的取舍,尤其是它们如何继承隐式操作和可见方法(例如,来自观察者对象,托管范围等)与旧的OO方法(以捆绑或引用的方式在活动之间传递列表项和列表等)相比较。
为说明我的学习困境,我实现了一个松脆的cookie和一个用于容纳cookie的罐子。可以在cookie罐中创建,使用和查看cookie。
Android代码往往在类的细节上含糊不清,并且教程使用的版本已过时,因此很难遵循最新版本的Android Architecture Component库的最佳实践。
伪Kotlin代码:
data class CrunchieCookie : {
var flavor: String?
var calories: String?
var photo: ImageView?
}
class CrunchieCookieViewModel : ViewModel() {
val _crunchieCookie: CrunchieCookie?
val crunchieCookie: CrunchieCookie = _crunchieCookie
}
class CookieJarListViewModel: ViewModel() {
val _cookieJar: MutableLiveData<CrunchieCookie>?
val cookieJar: LiveData<CrunchieCookie> = _cookieJar
}
目的
- 我希望创建,更新和销毁松脆饼干
- 我希望将松脆饼干放入饼干罐(并取出)
- 我希望在滚动的ListView中列出cookie-jar中的所有松脆饼干
- 我希望单击cookie-jar中的松脆饼烹饪以打开cookie的详细视图
- 最后,将cookie-jar存储在远程数据库中,以便将来计划本地/远程数据源
因此,按照我的想法,cookie视图模型将用于CRUD操作中,并在列表模型的详细信息视图中重用。
解决方法
让@Tenfour04 的评论成为答案。
您的 ViewModel 应该有一个 LiveData。包含 ListView 的 Fragment 应观察 LiveData 的变化,并在 LiveData 值更改时将 List 传递给 ListView。如果您实际上只是在修改 MutableList 的内容,那么您需要将 MutableLiveData 的值设置为相同的列表,以通知它需要通知观察者的更改。 – Tenfour04 9 月 9 日 0:02
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。