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);
}
我的资源文件中有以下 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);
}