EditText не обновляется со строкой даты, выбранной в 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 я хотел бы, чтобы выбранная дата отображалась как String в моем EditText, но в настоящее время этого не происходит. Однако я вижу InspectedDate в переменной оценки, когда нажимаю кнопку «Отправить» и отлаживаю экземпляр экзамена.

Кажется, что моя двусторонняя привязка данных не работает, когда я устанавливаю установщик setInspectedDate() экземпляра Assessment.

Как видно в модели 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];
        }
    };
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Убедитесь, что ваша модель Assessment расширяет android.databinding.BaseObservable, а методы получения и установки свойства связаны:

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

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

Он расширяет BaseObservable, и, к сожалению, свойства привязаны

android_monstertjie 19.03.2018 20:37

Обновил мой исходный пост

android_monstertjie 19.03.2018 20:48

Я вижу свою проблему благодаря твоему коду. Я забыл добавить notifyPropertyChanged.

android_monstertjie 19.03.2018 20:49

Другие вопросы по теме