Android – написание собственного (составного) компонентаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Android – написание собственного (составного) компонента

Сообщение Anonymous »

Приложение для Android, которое я сейчас разрабатываю, имеет основной вид деятельности, который стал довольно большим. В основном это связано с тем, что он содержит виджет TabWidget с тремя вкладками. Каждая вкладка имеет довольно много компонентов. Деятельность должна контролировать все эти компоненты одновременно. Итак, я думаю, вы можете себе представить, что это действие имеет около 20 полей (поле почти для каждого компонента). Также он содержит много логики (прослушиватели кликов, логика для заполнения списков и т. д.).

Что я обычно делаю в компонентных средах, так это разбиваю все на пользовательские компоненты. . Тогда каждый пользовательский компонент будет иметь четкую ответственность. Он будет содержать собственный набор компонентов и всю другую логику, связанную с этим компонентом.

Я пытался выяснить, как это можно сделать, и нашел кое-что в Android документацию, которую они любят называть «Комплексным контролем». (См. http://developer.android.com/guide/topi ... l#compound и прокрутите до раздела «Составные элементы управления»). Я хотел бы создать такой компонент на основе XML-файла, определяющего структура просмотра.

В документации сказано:


Обратите внимание, что так же, как с помощью Activity
вы можете использовать либо декларативный
(на основе XML) подход к созданию
содержащихся в нем компонентов, либо вы можете вкладывать
их программно из вашего кода.


Что ж, это хорошие новости! Подход на основе XML — это именно то, что мне нужно! Но там не сказано, как это сделать, за исключением того, что это «как с действием»... Но в действии я вызываю 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?

Подробнее здесь: https://stackoverflow.com/questions/147 ... -component
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»