Jim Clermonts
Jim Clermonts

Reputation: 2650

Android EditText not updating when using Data binding

EditText should contain the text "E-mail address". As soon as the user presses the EditText field, it should be cleared so that the user can fill in his real E-mail address.

Changes are done using "Build", "Rebuild project" to make sure the data binding is reloaded correctly.

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" />

User

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

Upvotes: 1

Views: 949

Answers (1)

RobinHood
RobinHood

Reputation: 10969

You are doing wrong here:

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

Do:

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

But why you are not setting text hint to Edittext in order to achieve your requirement?

Upvotes: 1

Related Questions