Я создаю упорядоченный список с пользовательским стилем, который используется в нескольких местах. Я стараюсь избегать лишнего кода и создавать повторно используемый файл макета для элемента списка, который можно включить в упорядоченный список с определенными параметрами. Как я мог это сделать?
Сейчас у меня следующее:
layout_ordered_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="order"
type="java.lang.String" />
<variable
name="text"
type="java.lang.String" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/order"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginBottom="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@{order}"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="60dp"
android:text="@{text}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
Затем я хотел бы использовать этот макет следующим образом:
layout_ordered_list.xml
<LinearLayout>
<include layout="@layout/layout_ordered_list_item"
bind:order="1"
bind:text="First text content"/>
<include layout="@layout/layout_ordered_list_item"
bind:order="2"
bind:text="Second text content"/>
etc.
</LinearLayout>
Обратите внимание, что меня не интересует динамическая установка переменных в коде. Я использую эти макеты только с жестко закодированными значениями (или со строковыми ресурсами), как в моем примере. Но поскольку я использую их так много раз, я не хочу снова и снова копировать и вставлять элемент списка только для того, чтобы изменить порядок и текстовое содержимое. Я также знаю, что мой пример не работает, он здесь просто для того, чтобы продемонстрировать, как я хотел бы, чтобы он работал.
Я уже искал ответ в документах Android, но такого примера нет. https://developer.android.com/training/improving-layouts/reusing-layouts.html https://developer.android.com/topic/libraries/data-binding/index.html#includes
Практически идентичный вопрос также задавался ранее в SO, но также нет полезного ответа: Как повторно использовать макеты с ‹include/› с параметрами?