Додаток Android, який я зараз розробляю, має основну діяльність, яка зросла досить великою. Це головним чином тому, що воно містить aTabWidget
3 вкладки. Кожна вкладка має досить багато компонентів. Діяльність повинна контролювати всі ці компоненти відразу. Тому я думаю, ви можете собі уявити, що ця діяльність має приблизно 20 полів (поле майже для кожного компонента). Крім того, він містить багато логіки (слухачі клацань, логіка для заповнення списків тощо).
Те, що я зазвичай роблю в рамках компонентних рамок, - це розділити все на спеціальні компоненти. Кожен користувацький компонент тоді несе чітку відповідальність. Він міститиме власний набір компонентів та всю іншу логіку, пов'язану з цим компонентом.
Я спробував розібратися, як це можна зробити, і в документації на Android я знайшов щось, що їм подобається називати «Комплексний контроль». (Побачити http://developer.android.com/guide/topics/ui/custom-components.html#compound і перейдіть до розділу «З'єднання управління») Я хотів би створити такий компонент на основі файлу XML , що визначає вид структури.
У документації зазначено:
Зауважте, що так само, як і у випадку діяльності, ви можете використовувати або декларативний (на основі 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
інстанції?