Привязать логическое значение к флажку MVVM - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь привязать логическое значение через viewmodel к представлению, но Android Studio выдает ошибку, и я не могу найти проблему. ViewModel.infilltype является логическим значением, и android: флажок также должен быть логическим.

"ошибка: '@ {viewModel.infillType}' несовместима с атрибутом android: флажок (attr) логический. Сообщение {kind = ERROR, text = error: '@ {viewModel.infillType}' несовместимо с атрибутом android: selected (attr) boolean., Sources = [E: \ SportveldOnderhoud \ app \ src \ main \ res \ layout \ list_item_check .xml: 14], исходное сообщение =, имя инструмента = Optional.of (AAPT)} "

У меня есть следующий код (я буду вставлять соответствующие фрагменты)

Check.java (модель)

public class Check {

    private UUID mId;
    private String mTitle;
    private Date mDate;
    ....
    private boolean mInfilltype;
    ....

    public Check() {
        this(UUID.randomUUID());
    }

    public Check(UUID id) {
        mId = id;
        mDate = new Date();
    }
    public UUID getId() {
        return mId;
    }

    ....

    public boolean isInfilltype() {
        return mInfilltype;
    }

    public void setInfilltype(boolean infilltype) {
        mInfilltype = infilltype;
    }
}

ViewModel:

public class CheckViewModel extends BaseObservable {
    private Check mCheck;
    private Activity mActivity;

    public CheckViewModel(Activity activity) {
        mActivity = activity;
    }

    @Bindable
    public String getTitle() {
        return mCheck.getTitle();
    }

    @Bindable
    public String getRenderedDate() {
        return mCheck.getDate().toString();
    }

    @Bindable
    public boolean infillType() {
        return mCheck.isInfilltype();
    }

    public Check getCheck() {
        return mCheck;
    }

    public void setCheck(Check crime) {
        mCheck = crime;
        List<String> strings;
        notifyChange();
    }

    public void onCheckClicked() {
        Intent intent = CheckPagerActivity.newIntent(mActivity, mCheck.getId());
        mActivity.startActivity(intent);
    }
}

Просмотр:

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable name="viewModel" type="nl.lekolkman.android.sportveldonderhoud.CheckViewModel" />
    </data>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="@{() -> viewModel.onCheckClicked()}"
        >

        <CheckBox
            android:id="@+id/solved_check_box"
            android:checked="@{viewModel.infillType}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"/>

        <TextView
            android:id="@+id/title_text_view"
            android:text="@{viewModel.title}"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/solved_check_box"
            android:textStyle="bold"
            tools:text="Crime Title"/>

        <TextView
            android:id="@+id/date_text_view"
            android:text="@{`Date solved: ` + viewModel.renderedDate ?? `(not solved)`}"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/solved_check_box"
            android:layout_below="@id/title_text_view"
            tools:text="Check Date"/>

    </RelativeLayout>
</layout>

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Оказалось, что мне нужно было добавить:

android { 
...
    dataBinding {
            enabled = true
        } 

в build.gradle

Тогда это все равно не сработало, но после добавления maven в репозитории в файлах build.gradle все заработало

0 голосов
/ 25 апреля 2018

Я не очень знаком с Java, но я почти уверен, что в C # вашему логическому значению требуется начальное значение (не нулевое) для правильного связывания.

Попробуйте изменить

private boolean mInfilltype;

до

private boolean mInfilltype = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...