Основное направление деятельности Android-приложения, которое я сейчас разрабатываю, стало довольно большим. Это в основном потому, что он содержит TabWidget
3 вкладки. Каждая вкладка состоит из нескольких компонентов. Действие должно контролировать все эти компоненты одновременно. Итак, я думаю, вы можете представить, что это Activity имеет около 20 полей (поле почти для каждого компонента). Также он содержит много логики (прослушиватели кликов, логику для заполнения списков и т. Д.).
В компонентных фреймворках я обычно делю все на отдельные компоненты. Тогда каждый пользовательский компонент будет нести четкую ответственность. Он будет содержать собственный набор компонентов и всю остальную логику, связанную с этим компонентом.
Я попытался выяснить, как это можно сделать, и нашел в документации Android кое-что, что они называют «составным элементом управления». (См. Http://developer.android.com/guide/topics/ui/custom-components.html#compound и перейдите к разделу «Составные элементы управления»). Я хотел бы создать такой компонент на основе XML-файла, определяющего структура просмотра.
В документации сказано:
Обратите внимание, что, как и в случае с Activity, вы можете использовать декларативный (основанный на XML) подход к созданию содержащихся компонентов или программно вкладывать их из своего кода.
Ну, это хорошие новости! Подход на основе XML - это именно то, что мне нужно! Но здесь не сказано, как это делать, за исключением того, что это «как с Activity» ... Но то, что я делаю в Activity, - это призыв setContentView(...)
к расширению представлений из XML. Этот метод недоступен, если вы, например, подкласс LinearLayout
.
Итак, я попытался раздуть XML вручную следующим образом:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
Это работает, за исключением того факта, что загружаемый XML-файл LinearLayout
объявлен как корневой элемент. Это приводит к тому, что раздутое LinearLayout
существо является дочерним элементом MyCompoundComponent
которого уже является LinearLayout
!! Итак, теперь у нас есть избыточный LinearLayout между ними MyCompoundComponent
и те представления, которые ему действительно нужны.
Может ли кто-нибудь предоставить мне лучший способ подойти к этому, избегая дублирования LinearLayout
экземпляров?