Не удается скрыть панель прогресса с привязкой данных

#android #data-binding #android-databinding

Вопрос:

Прошел год с тех пор, как я в последний раз использовал привязку данных. Кажется, с тех пор что-то изменилось, или я совершил глупую ошибку. Давайте рассмотрим мою проблему.

UPD: пожалуйста, также проверьте первый комментарий

Короче говоря, длинная история

введите описание изображения здесь

У меня есть простая панель прогресса в моем проекте:

 <data>
    <import type="android.view.View" />
    <variable
        name="vm"
        type="/path/to/.SignInViewModel" />
</data>

<layout>

    <androidx.constraintlayout.motion.widget.MotionLayout

        <ProgressBar
            ...
            android:visibility="@{vm.signInProgress ? View.VISIBLE : View.GONE}" />

    </androidx.constraintlayout.motion.widget.MotionLayout>
    
</layout>
 

который виден на экране до тех пор, пока я не нажму кнопку:

 binding.login.setOnClickListener {
    viewModel.signInProgress.value = false
}
 

где signInProgress-это просто изменяемые данные

 val signInProgress: MutableLiveData<Boolean> = MutableLiveData()
 

Это все о моем взаимодействии с ProgressBar. НО когда я нажимаю на кнопку входа в систему, моя панель прогресса становится невидимой всего на секунду, затем она появляется снова и начинает вращаться. Чтоааааать?

Также я проверил сгенерированный файл привязки, и, похоже, все в порядке:

 androidxDatabindingViewDataBindingSafeUnboxVmSignInProgressGetValue = androidx.databinding.ViewDataBinding.safeUnbox(vmSignInProgressGetValue);
if(androidxDatabindingViewDataBindingSafeUnboxVmSignInProgressGetValue) {
    dirtyFlags |= 0x10L;
} else {
    dirtyFlags |= 0x8L;
}
vmSignInProgressViewVISIBLEViewGONE = ((androidxDatabindingViewDataBindingSafeUnboxVmSignInProgressGetValue) ? (android.view.View.VISIBLE) : (android.view.View.GONE));
if ((dirtyFlags amp; 0x7L) != 0) {
    this.loginProgress.setVisibility(vmSignInProgressViewVISIBLEViewGONE);
}

 

Фрагмент:

 binding.lifecycleOwner = this
binding.vm = viewModel
 

Грейфер

 // app
android {
    buildFeatures {
        viewBinding true
        dataBinding true
    }
}
// project
classpath "com.android.tools.build:gradle:7.0.2"
 

Можете ли вы помочь мне понять, что здесь происходит? Я не могу понять, почему он не может просто спрятаться? Это мой личный проект, поэтому я могу поделиться ссылкой, если вы хотите мне помочь 🙁

Комментарии:

1. Хорошо, когда я делаю что — то вроде этого: привязка.прогресс.isVisible = ложь по щелчку- та же история

Ответ №1:

Хорошо, я нашел причину проблемы, но я еще не нашел решения. Проблема в моем отображении движения (я создал тот же макет с помощью ConstraintLayout), но мне интересно, почему