Android 使用数据绑定时 EditText 未更新
Android EditText not updating when using Data binding
EditText 应包含文本 "E-mail address"。一旦用户按下 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;
}
}
你在这里做错了:
binding.userEmail.setText("E-mail address");
做:
User user = new User("E-mail address");
binding.setUser(user);
但是为什么您不将 text hint 设置为 Edittext 来实现您的要求?
EditText 应包含文本 "E-mail address"。一旦用户按下 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;
}
}
你在这里做错了:
binding.userEmail.setText("E-mail address");
做:
User user = new User("E-mail address");
binding.setUser(user);
但是为什么您不将 text hint 设置为 Edittext 来实现您的要求?