Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在MVVM中观察LiveData时,如何在onChanged()上生成单独的代码?[未解决]_Android_Mvvm - Fatal编程技术网

Android 在MVVM中观察LiveData时,如何在onChanged()上生成单独的代码?[未解决]

Android 在MVVM中观察LiveData时,如何在onChanged()上生成单独的代码?[未解决],android,mvvm,Android,Mvvm,所以,我实施了 public class DriverLoginActivity extends BaseActivity implements Observer<LoginUser> 现在,对于这个活动,我有两个按钮。因此,根据按钮的点击,这个onChanged将被调用。现在我想为登录用户做登录按钮,并注册。我怎样才能使它在一次更改的方法中分离 请告诉我最好的做法 我认为我不应该在viewmodel类中使用setter,在活动中使用getter。它不考虑MVVM实践。对吗?在MV

所以,我实施了

public class DriverLoginActivity extends BaseActivity implements Observer<LoginUser>
现在,对于这个活动,我有两个按钮。因此,根据按钮的点击,这个onChanged将被调用。现在我想为登录用户做登录按钮,并注册。我怎样才能使它在一次更改的方法中分离

请告诉我最好的做法


我认为我不应该在viewmodel类中使用setter,在活动中使用getter。它不考虑MVVM实践。对吗?

在MVVM中,ViewModel设计用于管理数据。理想的方法是在ViewModel中处理API调用。为此使用LiveData并不是LiveData的理想用途

您的ViewModel可以具有

public void onLoginClick(View view) {
    //Implement Login API call here
}


public void onRegisterClick(View view){
    //Implement Register API call here

}
在您的activity_main.xml中

<Button
            android:id="@+id/btnLogin"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="32dp"
            android:layout_marginStart="32dp"
            android:layout_marginTop="32dp"
            android:text="Login"
            android:onClick="@{(v) -> LoginViewModel.onLoginClick()}"

<Button
            android:id="@+id/btnRegister"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="32dp"
            android:layout_marginStart="32dp"
            android:layout_marginTop="32dp"
            android:text="Register"
            android:onClick="@{(v) -> LoginViewModel.onRegisterClick()}"

虽然很大,但让我试着回答。@ChintanSoni焦急地等待着,我希望你能从Kotlin开始,因为我已经很久没有接触Java了:)@ChintanSoni嗯,不。我想我会使用一些在线工具转换成Java。可以给这个项目的GitHub repo链接。Acha,请澄清我2-3件事。你们想说我在点击按钮时想做什么,我应该在viewmodel中做,而不是在activity中?让我们在我的主要活动中说。我有两个按钮,一个用于api调用,一个用于打开新活动。那我该怎么办?还有一个疑问。假设我的活动中有10个按钮。所有的按钮逻辑都完全不同。那么我应该创造10种不同的方法吗?如果在按钮点击逻辑后,我必须在activity中显示结果呢?要打开新activity,您需要实现Navigator,如我发布的示例链接所述。这是导航器的链接。请读一下@DipaliSingh随时:)
<Button
            android:id="@+id/btnLogin"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="32dp"
            android:layout_marginStart="32dp"
            android:layout_marginTop="32dp"
            android:text="Login"
            android:onClick="@{(v) -> LoginViewModel.onLoginClick()}"

<Button
            android:id="@+id/btnRegister"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="32dp"
            android:layout_marginStart="32dp"
            android:layout_marginTop="32dp"
            android:text="Register"
            android:onClick="@{(v) -> LoginViewModel.onRegisterClick()}"