android viewmodel, liveata, привязка данных теперь устанавливает значение - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть 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, чтобы избежать утечки данных.

...