EditText должен содержать текст «Адрес электронной почты». Как только пользователь нажимает на поле EditText, он должен быть очищен, чтобы пользователь мог заполнить свой реальный адрес электронной почты.Android EditText не обновляется при использовании привязки данных
Изменения выполняются с использованием «Build», «Rebuild project», чтобы убедиться, что привязка данных перезагружена правильно.
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final LoginActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.login_activity);
binding.userEmail.setText("E-mail address");
binding.setViewmodel(new LoginViewModel(new LoginDataListener() {
@Override
public void onLoginClicked() {
String userEmail = binding.userEmail.getText().toString();
User user = new User(userEmail, "");
}
}));
}
LoginViewModel
public class LoginViewModel {
private LoginDataListener mDataListener;
public LoginViewModel(@NonNull final LoginDataListener loginDataListener) {
mDataListener = loginDataListener;
}
public void onLoginClicked(View view){
mDataListener.onLoginClicked();
}
public void onEmailAddressClicked(View view) {
EditText userEmail = (EditText) view.findViewById(R.id.user_email);
userEmail.setText("");
}
login_activity.xml
<EditText
android:id="@+id/user_email"
android:onClick="@{viewmodel::onEmailAddressClicked}"
android:text="@={user.email}"
android:inputType="textEmailAddress"
android:layout_gravity="center_horizontal" />
<Button
android:id="@+id/login_button"
android:onClick="@{viewmodel::onLoginClicked}"
android:text="@string/login"
android:layout_gravity="center_horizontal" />
Пользователь
public class User {
private String email;
public User(String email) {
this.email = email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
Вы правы, текст подсказки делает трюк. Большое спасибо! –