У меня возникают проблемы с пониманием того, как парадигма Fragment + ViewModel работает с View как EditText .
Будучи EditText, он, очевидно, будет изменен в представлении (фрагмент). Но я также хочу иметь возможность изменить его в ViewModel: например, чтобы стереть его текст.
Вот код в классе Fragment:
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
...
comment = mViewModel.getComment();
comment.observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String s) {
commentView.setText(s);
}
});
...
commentView.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
mViewModel.setComment(String.valueOf(s));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
});
Как видите, я установил наблюдатель , поэтому, когда я изменяю значение MutableLiveData, представление изменяется. И я установил watcher , поэтому, когда я (при использовании приложения) изменяю значение View, MutableLiveData изменяется.
Вот код класса ModelView:
public void addRegister() {
...
String comment = this.comment.getValue();
...
this.comment.setValue("");
Когда я запускаю приложение, не появляется сообщение об ошибке, но оно зависает. Я думаю, из-за бесконечного l oop. Как мне подходить к EditTexts с этой парадигмой View + ViewModel? Что я не понимаю?
Большое спасибо заранее!