Использование Databinding LiveData в макетах без observe
Никак не получается заставить работать есть Activity на нём Fragment, во фрагменте есть SwipeRefreshLayout
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
app:refreshing="@{vievModelList.flUpdate}">
ViewModel создается на Activity и в нём есть
public class ViewModelList extends AndroidViewModel
public MutableLiveData<Boolean> flUpdate = new MutableLiveData<>(false);
во фрагменте подключаю databinding
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentListBinding.inflate(getLayoutInflater());
binding.setLifecycleOwner(getActivity());
modelList = new ViewModelProvider(requireActivity()).get(typeList, ViewModelList.class);
binding.setVievModelList(modelList);
Но при изменении flUpdate ничего не происходит. Вот если добавить observe
LiveData<Boolean> statusDoc = modelList.getFlUpdate();
statusDoc.observe(this, status -> {
binding.setVievModelList(modelList);
});
то всё начинает правильно работать. Подскажите, возможно заставить databinding работать без observe? Если я правильно понимаю то макет должен сам создавать у себя подписку на изменения. Возможно дело в
binding.setLifecycleOwner(getActivity());
Но я пробовал менять getActivity() на this и на requireActivity(), результат нулевой.
Добавлено:
Нашел вот такой способ добиться желаемого, поменял тип поля на ObservableField
public ObservableField<Boolean> flUpdate = new ObservableField<>(false);
Но пока не совсем понятно чем отличается ObservableField от MutableLiveData. Для этой переменной проблем нет, а вот что будет если и другие переделать не придётся ли переделывать всю логику?
Добавлено:
Согласно вот этой ссылке ничего особого делать не нужно,
нужно только правильно указать владельца жизненного цикла. Но что бы я не указывал (this, this.getViewLifecycleOwner(), getActivity()) (Делаю я это во фрагменте), ничего не срабатывает.
Вот если повернуть экран, например, то переменная перечитывается.