Когда я обновляю свое свойство User в LoginViewModel из MainActivity, мой пользовательский интерфейс не меняется (застрял на этой проблеме 2 дня и не могу найти решение)
Мой класс User расширяет BaseObservable (добавлено @Bindable и notifyPropertyChanged ()), но я не знаю, что еще я должен делать.
Это классы:
Пользователь:
public class User extends BaseObservable {
protected String userName;
protected String lastName;
public User(String userName, String lastName) {
this.userName = userName;
this.lastName = lastName;
notifyPropertyChanged(BR._all);
}
@Bindable
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
notifyPropertyChanged(BR.userName);
}
@Bindable
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}
ViewModel:
public class LoginViewModel extends ViewModel {
private User user;
public LoginViewModel() {
user = new User("Pero","Peric");
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getUserName()
{
return user.getUserName();
}
public void setUserName(String userName)
{
user.setUserName(userName);
}
public String getLastName()
{
return user.getLastName();
}
public void setLastName(String lastName)
{
user.setUserName(lastName);
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
LoginViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(LoginViewModel.class);
binding.setViewModel(viewModel);
binding.executePendingBindings();
binding.getViewModel().setUserName("John");
binding.executePendingBindings();
}
}
XML
<data>
<variable
name="viewModel"
type="com.example.bindinglearning.viewModels.LoginViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={viewModel.userName}"
>
</EditText>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.lastName}"></EditText>
</LinearLayout>