Как отобразить несколько макетов в инструментах:пространство имен listitem xml-файла RecyclerView

#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 и наблюдайте на правой панели. Затем сделайте то же самое для других.