Как включить макет дважды в 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 на основе только что извлеченного раздела. Таким образом, вы сможете искать все дочерние представления с одинаковыми идентификаторами, в каждом родительском представлении разных идентификаторов в два этапа.