关于使用新架构组件的MVVM,我有一个问题,如果我的应用程序需要显示一个Dialog,其中有3个选项来自我的VM中发生的某些操作,我应该如何实现?谁负责向Activity/Fragment发送显示对话框的命令?
LiveData开始观察时是否可以防止接收到最后一个值?我正在考虑LiveData用作事件。
例如类似于show message,导航事件或对话框触发器之类的事件EventBus。
ViewModel与片段之间的通信有关的问题,Google给我们LiveData提供了用数据更新视图的方法,但是这种类型的通信不适用于仅需通过单个事件更新视图一次的情况,也无法保存视图的引用ViewModel并调用某些方法,因为它将导致内存泄漏。
我发现了类似的SingleLiveEvent-但它仅适用于1个观察者,不适用于多个观察者。
android android-livedata android-architecture-components mutablelivedata
我在 Navigation 组件中使用共享 ViewModel 而不是为每个片段创建一个 ViewModel(主要是因为它更容易)但是现在当我重新输入片段并订阅该片段的 ViewModel 实时数据时出现问题,我得到最后状态也太。
这是 ViewModel 代码:
val apiLessonData: MutableLiveData<String>> = MutableLiveData()
fun getLessonsUserCreated() =
apiCall(MyMaybeObserver(apiLessonData))
Run Code Online (Sandbox Code Playgroud)
在 MyMaybeObserver 中,我有这样的事情:
override fun onSuccess(t: T) {
apiDataObserver.postValue(t)
}
Run Code Online (Sandbox Code Playgroud)
这就是我在片段中观察它的方式:
private val apiAddGoalData = Observer<String> { response ->
showSnack(response)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
.
.
viewModel.apiAddGoalData.observe(viewLifecycleOwner, apiAddGoalData)
.
.
}
Run Code Online (Sandbox Code Playgroud)
现在当我第一次进入它工作正常但我第二次打开它时,它显示了上一次的小吃,如何在不创建新的 ViewModel 的情况下停止它?
android android-fragments android-livedata android-viewmodel
android ×3
android-architecture-components ×1
architecture ×1
components ×1
mvvm ×1
presenter ×1