Как включить макет дважды в Android?

Элемент Android <include /> позволяет включать другие макеты XML. Полезно для общего заголовка для нескольких действий.

Но что, если вы хотите включить макет несколько раз в одном представлении? Например, у меня есть тщательно обработанный макет, который я хочу отобразить три раза на мой взгляд. Каждому из этих экземпляров понадобятся разные значения. Поскольку include - это, в основном, взятие XML и вставка его здесь, мне нужно что-то более мощное.

Есть ли какой-нибудь механизм для этого?

(Я правильно объяснил?)

Ответ 1

Сообщение в блоге http://www.coboltforge.com/2012/05/tech-stuff-layout/ объясняет именно эту проблему (один и тот же формат XML включается несколько раз) и как его решить!

Изменить

Когда вы выполняете поиск по идентификатору, вы всегда находите первые элементы, поэтому скрываются другие виджеты.

Однако он может быть решен

<include> -- id1
    -- stuff
</include>
<include> -- id2
    -- stuff
</include>

Итак, мы можем найти подэлементы, сначала посмотрев id2/id1.

View include_1 = findViewById(R.id.id1); 
View include_2 = findViewById(R.id.id2); 

и, наконец,

include_2.findViewById(R.id.elementx );

Ответ 2

Есть ли какой-нибудь механизм для этого?

Создайте пользовательский View. Вот проект, где у меня есть пользовательский виджет ColorMixer, например. Вы можете включить несколько таких ColorMixers в один макет деятельности, если вы так решили. Каждый из них может иметь свои собственные параметры для адаптации своей работы.

Ответ 3

Еще один способ: установить шаблон "шаблон" в xml и раздуть его с помощью LayoutInflater и добавить к вашему виду как столько раз, сколько вам нужно, и вставлять туда пользовательские значения. Здесь приведен пример создания пользовательского представления Toast View с расширителем Layout.

Ответ 4

Вы можете использовать android:id, чтобы указать идентификатор корневого представления включенного макета; он также переопределит идентификатор включенного макета, если он определен. Аналогично, вы можете переопределить все параметры макета.

На основе предоставленного android:id вы можете получить раздел по id, а затем вы можете снова получить элемент по id на основе только что извлеченного раздела. Таким образом, вы сможете искать все дочерние представления с одинаковыми идентификаторами, в каждом родительском представлении разных идентификаторов в два этапа.