Не удается передать viewmodel в привязке данных к дочернему макету включения - PullRequest
0 голосов
/ 05 апреля 2020

это некоторый код в моем родителе xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
    <variable
            name="viewModel"
            type="(..).viewmodels.TestViewModel"/>
</data>


<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:theme="@style/AppTheme.AppBarOverlay"
        >

    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="parent">

        <include
                android:id="@+id/layout"
                bind:viewModel="@{viewModel}"
                layout="@layout/test_content"/>
    </ScrollView>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Вот дочерний включающий макет

<layout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
                name="viewModel"
                type="(..).TestViewModel" />
    </data>
<LinearLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="74dp"
        tools:layout_editor_absoluteY="1dp"
        xmlns:android="http://schemas.android.com/apk/res/android">

    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <Button
                android:id="@+id/disable"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:background="@color/orange"
                android:text="@{viewModel.buttonText}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>
</layout>

Как вы можете видеть в этом примере, я привязываю данные в виде привязки к модели представления и передал его от родителя к потомку через bind: viewModel = "@ {viewModel}"

Вот код в упражнении:

val binding:TestContentBinding = DataBindingUtil.setContentView(this, R.layout.test_content)
binding.setLifecycleOwner(this)
binding.viewModel = testViewModel

Если я установил привязку к потомку xml тогда данные связываются, однако, если я устанавливаю привязку к родительскому действию, модель представления не передается.

Серверная часть, безусловно, содержит правильные данные, однако я не знаю, как связать данные ребенку. Я даже пытался вручную установить viewModel макета, однако это не работает. Как передать модель просмотра?

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете попробовать изменить имя переменной во включенном макете.

Вот краткая статья , объясняющая, как использовать макет включения с ViewModel.

...