2016-07-29 2 views
0

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; 
    }  
} 

ответ

1

Вы делаете неправильно здесь:

binding.userEmail.setText("E-mail address"); 

Do:

User user = new User("E-mail address"); 
binding.setUser(user); 

Но почему вы не устанавливая text hint в EditText для того, чтобы достигнуть ваше требование?

+0

Вы правы, текст подсказки делает трюк. Большое спасибо! –

Смежные вопросы