EditText 未使用 Datepickerdialog 中选择的 Date 字符串更新

EditText not updated with Date string selected in Datepickerdialog

我的资源文件中有以下 EditText:

<data>
    <variable name="assessment" type="Models.Assessment"/>
    <variable name="assessmentVM" type="ViewModel.AssessmentViewModel"/>
</data>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

            <TextView
                style="@style/AssessorTextView"
                android:text="Date Inspected"/>
            <EditText
                style="@style/AssessorEditText"
                android:hint="Date inspected"
                android:text="@={assessment.inspectedDate}"
                android:focusable="false"
                android:editable="false"
                android:clickable="true"
                android:onClick="@{assessmentVM::onCalendarSelection}"/>

    </LinearLayout>

</ScrollView>

这是我的 OnDateSetListener:

DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener(){
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.YEAR, year);

            SetDateOnModel(year, month, dayOfMonth);
        }
    };

最后是我的 SetDateOnModel 方法:

public void SetDateOnModel(int year, int month, int day){
        try{
            StringBuilder builder = new StringBuilder();
            builder.append(month).append("/").append(month).append("/").append(day);

            this.assessment.setInspectedDate(builder.toString());

            ab.executePendingBindings();
        } catch (Exception exception){
            assessment.setInspectedDate(new Date().toString());
        }
    }

在我的 DatePickerDialog 中选择日期时,我希望所选日期在我的 EditText 中显示为 String,但目前没有发生。但是,当我单击 "Submit" 按钮并调试评估实例时,我确实在评估变量中看到了 InspectedDate

当我设置评估实例的 setInspectedDate() setter.

时,我的双向数据绑定似乎不起作用

Assessment模型中可以看出,它扩展了BaseObservable,属性是@Bindable

public class Assessment extends BaseObservable implements Parcelable {

    public Assessment(){

    }

    @SerializedName("InspectedDate")
    private String inspectedDate;


    @Bindable
    public String getInspectedDate() {
        return inspectedDate;
    }
    public void setInspectedDate(String inspectedDate) {
        this.inspectedDate = inspectedDate;
    }

    protected Assessment(Parcel in) {

        inspectedDate = in.readString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(inspectedDate);

    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<Assessment> CREATOR = new Parcelable.Creator<Assessment>() {
        @Override
        public Assessment createFromParcel(Parcel in) {
            return new Assessment(in);
        }

        @Override
        public Assessment[] newArray(int size) {
            return new Assessment[size];
        }
    };
}

确保您的 Assessment 模型扩展 android.databinding.BaseObservable 并且绑定 属性 的 getter 和 setter:

@Bindable
public String getInspectedDate() {
    return this.inspectedDate;
}

public void setInspectedDate(String inspectedDate) {
    this.inspectedDate = inspectedDate;
    notifyPropertyChanged(BR.inspectedDate);
}