J'essaie d'utiliser MVVM avec la liaison de données .. Où dois-je écrire l'événement click (Viewmodel Or Activity)
Les exemples sont les bienvenus ...
Vous pouvez écrire vos événements de clic sur l'un ou l'autre. Personnellement, ma préférence dépend de ce que je veux réaliser et de ce dont j'ai besoin pour y parvenir.
Cliquez sur l'événement dans ViewModel
Définissez votre ViewModel. Communiquez avec votre activité via un rappel.
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();
}
}
Implémentez ce rappel dans votre activité:
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);
}
}
Passez votre ViewModel en tant que variable à votre XML. Ensuite, faites ceci:
<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)}"/>
Cliquez sur les événements dans l'activité
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
}
}
}
Puis dans votre 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}"/>
Pour plus d'informations, consultez le document officiel ici