我试图在我的android项目中遵循MVVM设计模式,但我遇到了一些问题:
1.如果操作要传输到另一个活动/片段或执行某些逻辑而不重定向到另一个视图,我不知道将点击侦听器放在哪里,将其放入ViewModel或视图中
2.我知道共享首选项将被放入模型中,但仅为所有共享首选项创建一个单独的类,或者将其放入模型类示例中:在登录时,我想保存用户名&密码我是否在UserModel中创建我的共享首选项函数或创建一个新类并将其命名为SharedPreference ??
提前致谢。
答案 0 :(得分:8)
将点击侦听器放在您的活动/片段中,而不是放在视图模型中,因为侦听器仍然是视图的一部分。
不应在视图模型本身内部调用共享首选项方法,而是使视图模型调用成为将信息保存到共享首选项中的类。在这种情况下,我建议使用存储库模式。然后,您的视图模型将从您的存储库中调用方法x(),然后方法x()将通过共享首选项,本地数据库或可能通过云来保存信息。
答案 1 :(得分:0)
<LinearLayout
android:id="@+id/item_people"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="vertical"
android:onClick="@{stateViewModel::onItemClick}">
</LinearLayout>
在viewmodel中
public void onItemClick(View v){
}
通过在视图模式下创建功能,您可以添加单击侦听器。
接下来是共享优先,共同创建utils文件,以便将它用于整个应用程序。
答案 2 :(得分:0)
<Button
android:id="@+id/btn_nw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{() -> viewModel.testLoginModuleClicked()}"
android:text="Login"/>
在ViewModel类中
val loginClickEvent = SingleLiveEvent<Void>()
fun testLoginModuleClicked() {
loginClickEvent.call()
}
在您的活动/片段课中
loginVM.loginClickEvent.observe(this, Observer {
callMockApi()
})