Android datepicker和数据绑定问题

时间:2018-09-28 16:58:25

标签: android android-databinding

我目前有一个非常奇怪的行为,与日期选择器和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())
            );
        }
    }

我非常确定整个过程工作正常,确实,当填充 issuedDate 模型,然后将 answered 模型设置为true时,该函数会正确触发。这将通知视图更改其启用状态。我在DataBindingIml类上进行了一些调试工作,并且看到它调用了 setEnabled 方法,并且按钮上的参数为true。我看到按钮的启用状态在屏幕上闪烁了几毫秒,然后突然返回其禁用状态。

我认为当编辑文本issue_date_et写在选择的日期内时,按钮返回到禁用状态。在片段内的edittext上书写会导致父活动返回先前绘制的状态,这是可能的吗?还是我在数据出价方面做得很烂?

0 个答案:

没有答案