Tout d'abord, la mise en page XML
:qiita.rb
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
Ce à quoi je veux faire attention, c'est avec cette définition
<variable name="user" type="com.example.User" />
Quand,
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />
La partie appelée à partir de ce ViewModel.
Et le suivant semble être une entité.
public class User {
private final String firstName;
private final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
L'expression @ {user.firstName} utilisée pour l'attribut text accède au champ firstName et à la méthode getFirstName () de cette dernière classe.
Maintenant, cela ressemble à l'activité qui connecte xml et l'entité.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);
}
Ce qui précède est comme Activity, il semble que la liaison est instanciée et que xml et l'entité utilisateur sont liés.
En outre, l'expression de liaison semble être capable d'attribuer l'écouteur de clic de la vue à la méthode onClickFriend (), comme ceci: ..
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="handlers" type="com.example.MyHandlers"/>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
android:onClick="@{handlers::onClickFriend}"/>
</LinearLayout>
</layout>
Et il réagit au code suivant
public class MyHandlers {
public void onClickFriend(View view) { ... }
}
Dans le cas de cette onSaveClick,
public class Presenter {
public void onSaveClick(Task task){}
}
Cela ressemble à ceci:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent">
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:onClick="@{() -> presenter.onSaveClick(task)}" />
</LinearLayout>
Recommended Posts