#android #layout
Вопрос:
У меня есть RecyclerView с различными типами держателей просмотра, которые имеют разные ресурсы компоновки. Есть ли способ указать все макеты в пространстве имен tools:ListItem? Если я укажу все элементы списка таким образом:
<androidx.recyclerview.widget.RecyclerView
......
tools:listitem="@layout/layout_1"
tools:listitem="@layout/layout_2"
tools:listitem="@layout/layout_3" />
Я получил ошибку из-за дублированных элементов. Я мог бы сделать что-то вроде этого:
<androidx.recyclerview.widget.RecyclerView
......
tools:listitem0="@layout/layout_1"
tools:listitem1="@layout/layout_2"
tools:listitem2="@layout/layout_3" />
Ошибка не отображается, но функция щелчка, открывающая макет, теряется, поскольку в пространстве имен нет такого объявления.
То же самое происходит, когда используются инструменты:отображение.
Ответ №1:
tools:listitem
Атрибут принимает только один тип элемента, поэтому одним из возможных и простых способов является определение всех ваших различных макетов в отдельном xml-файле с использованием <include/>
тега с родительским элементом LinearLayout.
1.Создайте разрешение->макет->>item_multiple_layouts.xml>> и определите все свои макеты в порядке, который вы хотите отобразить в окне просмотра вторичной переработки, используя вертикальную линейную разметку:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/item_type_1" />
<include layout="@layout/item_type_2" />
<include layout="@layout/item_type_3" />
<include layout="@layout/item_type_1" />
<include layout="@layout/item_type_2" />
<include layout="@layout/item_type_3" />
</LinearLayout>
2.To предварительный просмотр приведенных выше макетов в окне просмотра вторсырья вы можете указать на приведенный выше макет с помощью ItemCount=1, чтобы отобразить их только один раз, как показано ниже:
<androidx.recyclerview.widget.RecyclerView
tools:listitem="@layout/item_multiple_layouts"
tools:itemCount="1"/>
Комментарии:
1. Хорошее решение, мне оно нравится. Это лучшее решение, чем вручную менять инструменты:listitem0=»…» на инструменты:listitem=»…», но это все равно хакерский способ ;). Вам следует дважды щелкнуть, чтобы перейти к нужному макету.
Ответ №2:
Я думаю, что нет никакого чистого способа сделать это. Если вы хотите просмотреть несколько элементов одного и того же макета, вот что вы можете сделать:
tools:listitem="@layout/layout_1"
tools:itemCount="5"
Для этой цели существует другой подход к реализации пользовательского окна просмотра. Но я нахожу это излишним. Я просто запущу приложение вместо того, чтобы писать этот код 😛
Вот ссылка: https://medium.com/@AllanHasegawa/previewing-multiples-item-types-in-a-recyclerview-163aebc2f34a
Комментарии:
1. Спасибо за ответ, но, допустим, у меня есть 5 предметов, но каждый предмет имеет разный макет. Я хочу, чтобы у меня был быстрый доступ к ним в теге RecylerView.
2. Самым простым способом было бы поменять местами различные макеты вручную. Например, замените layout1 и наблюдайте на правой панели. Затем сделайте то же самое для других.