В настоящее время у меня очень странное поведение, связанное с выбором даты и привязкой данных Android.
Я значительно упростил код, так что это моя деятельность xml:
<ScrollView ...>
<android.support.constraint.ConstraintLayout>
<FrameLayout
android:id="@+id/step1_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_small"
app:layout_constraintVertical_chainStyle="spread_inside"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
</ScrollView>
<Button android:id="@+id/forward_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:enabled="@{viewModel.isAnswered}"
android:maxWidth="100dp"
android:onClick="@{(v)->presenter.onClickForward(v)}"
android:text="@string/common_forward"
android:textAlignment="center"/>
Макет фрейма содержит этот текст редактирования с помощью выбора даты:
<EditText
android:id="@+id/issue_date_et"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/padding_small"
android:layout_marginStart="@dimen/padding_small"
android:focusable="false"
android:inputType="date"
android:onClick="@{(view) -> presenter.onClickDateEditText(view)}"
android:text="@{viewModel.issuedDate}"
app:layout_constraintEnd_toEndOf="@id/right_guideline"
app:layout_constraintStart_toStartOf="@id/left_guideline"
app:layout_constraintTop_toBottomOf="@+id/issue_date_label_tv"/>
Иэто в основном наблюдатель, который изменяет состояние кнопки:
public void onPropertyChanged(Observable observable, int i) {
if (i != BR.answered) {
mModel.setAnswered(!Utils.checkStringIsNull(mModelID.getIssuedDate())
);
}
}
Я почти уверен, что все работает хорошо, действительно, функция корректно срабатывает, когда модель .DidDate была заполнена,тогда модель answer устанавливается в значение true.Это уведомляет представление об изменении его включенного статуса.Я выполнил некоторую отладочную работу над классом DataBindingIml и увидел, что он вызывает метод setEnabled с параметром true на кнопке.Я видел, как включенное состояние кнопки мигало на экране в течение нескольких миллисекунд и внезапно возвращалось в отключенное состояние.
Я думаю, что кнопка вернется в отключенное состояние, когда текст редактирования Issue_Date_et будет записан внутри выбранной даты.Возможно, что запись в тексте редактирования внутри фрагмента приведет к тому, что родительское действие вернет ранее нарисованное состояние?Или я что-то делаю с данными?