点击事件在MVVM架构中的位置
Location of click event in MVVM architecture
我正在尝试将 MVVM 与数据绑定一起使用。我应该在哪里编写点击事件(Viewmodel 或 Activity)
欢迎提供示例...
您可以在任何一个上编写您的点击事件。就我个人而言,我的偏好取决于我想要实现的目标以及实现目标所需的目标。
Click event in ViewModel
定义您的 ViewModel。通过回调与您的 activity 沟通。
public class MyViewModel extends ViewModel{
private MyCustomCallback callback;
...
public void doOnClick(MyCustomCallback mCallback){
boolean isSuccessful = doMyAction.execute();
if (isSuccessful){
mCallback.actionIsSuccessful();
} else {
mCallback.actionFailed();
}
}
...
public void setCallback(callback){
this.callback = callback;
}
public MyCustomCallback getCallback(){
return this.callback;
}
...
public interface MyCustomCallback{
void actionIsSuccessful();
void actionFailed();
}
}
在您的 activity 中实现此回调:
public class MyActivity extends AppCompatActivity{
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState){
...
callback = new MyViewModel.MyCustomCallback{
@Override
public void actionIsSuccessful(){
//do something when action is successful
}
@Override
public void actionFailed(){
//do something when action fails
}
}
viewModel.setCallback(callback);
}
}
将您的 ViewModel 作为变量传递给您的 XML。然后这样做:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:layout_margin="20dp"
tools:text="CLICK ME!!!"
android:textColor="@android:color/white"
android:onClick="@{() -> ViewModel.doOnClick(ViewModel.callback)}"/>
Click events in Activity
public class MyActivity extends AppCompatActivity{
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState){
//initialize your binding
...
binding.setClickHandler(new MyActivityClickHandler());
}
public class MyActivityClickHandler{
public void onClickMeClicked(View view){
//do something
}
}
}
然后在你的 XML:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:layout_margin="20dp"
android:text="@string/verify"
android:textColor="@android:color/white"
android:onClick="@{ClickHandler::onClickMeClicked}"/>
更多信息查看官方文档here
我正在尝试将 MVVM 与数据绑定一起使用。我应该在哪里编写点击事件(Viewmodel 或 Activity)
欢迎提供示例...
您可以在任何一个上编写您的点击事件。就我个人而言,我的偏好取决于我想要实现的目标以及实现目标所需的目标。
Click event in ViewModel
定义您的 ViewModel。通过回调与您的 activity 沟通。
public class MyViewModel extends ViewModel{
private MyCustomCallback callback;
...
public void doOnClick(MyCustomCallback mCallback){
boolean isSuccessful = doMyAction.execute();
if (isSuccessful){
mCallback.actionIsSuccessful();
} else {
mCallback.actionFailed();
}
}
...
public void setCallback(callback){
this.callback = callback;
}
public MyCustomCallback getCallback(){
return this.callback;
}
...
public interface MyCustomCallback{
void actionIsSuccessful();
void actionFailed();
}
}
在您的 activity 中实现此回调:
public class MyActivity extends AppCompatActivity{
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState){
...
callback = new MyViewModel.MyCustomCallback{
@Override
public void actionIsSuccessful(){
//do something when action is successful
}
@Override
public void actionFailed(){
//do something when action fails
}
}
viewModel.setCallback(callback);
}
}
将您的 ViewModel 作为变量传递给您的 XML。然后这样做:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:layout_margin="20dp"
tools:text="CLICK ME!!!"
android:textColor="@android:color/white"
android:onClick="@{() -> ViewModel.doOnClick(ViewModel.callback)}"/>
Click events in Activity
public class MyActivity extends AppCompatActivity{
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState){
//initialize your binding
...
binding.setClickHandler(new MyActivityClickHandler());
}
public class MyActivityClickHandler{
public void onClickMeClicked(View view){
//do something
}
}
}
然后在你的 XML:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:layout_margin="20dp"
android:text="@string/verify"
android:textColor="@android:color/white"
android:onClick="@{ClickHandler::onClickMeClicked}"/>
更多信息查看官方文档here