У меня есть Viewmodel, как это:
public class LoginViewModel extends ViewModel {
private MutableLiveData<String>username=new MutableLiveData<>();
public LiveData<String> getUsername() {
Log.d("lvm","getting username <- "+username.getValue());
return username;
}
public void setUsername(String username) {
Log.d("lvm","setting username -> "+username);
this.username.postValue(username);
}
void onLoginClicked(Context context){
String username=getUsername().getValue();
Toast.makeText(context,username,Toast.LENGTH_SHORT).show();
}
databinding
, viewbinding
оба включены.
И в макете я добавил android:text="@{loginvm.username}"
в тексте редактирования, прежде всего добавил поле данных.
И в LoginActivity
я настроил его правильно:
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_login);
LoginViewModel mainViewModel = new ViewModelProvider(this).get(LoginViewModel.class);
mBinding.setLoginvm(mainViewModel);
mBinding.setLifecycleOwner(this);
mBinding.btnLogin.setOnClickListener(v -> mainViewModel.onLoginClicked(this));
Но проблема в том, что оно тост - null
и журнал установки никогда не происходит , отображается только журнал получения.
Как мне решить эту проблему?
Я произвел приведение типа с MutableLiveData
до LiveData
, чтобы избежать утечки данных.