#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), но мне интересно, почему