Şu anda geliştirmekte olduğum Android uygulamasının oldukça büyüyen bir ana etkinliği var. Bunun başlıca nedeni TabWidget
, 3 sekmeli bir içermesidir . Her sekmenin epeyce bileşeni vardır. Aktivite, tüm bu bileşenleri aynı anda kontrol etmelidir. Bu yüzden bu Faaliyetin 20 alana (neredeyse her bileşen için bir alan) sahip olduğunu hayal edebileceğinizi düşünüyorum. Ayrıca birçok mantık içerir (tıklama dinleyicileri, listeleri doldurma mantığı, vb.).
Normalde bileşen tabanlı çerçevelerde yaptığım şey, her şeyi özel bileşenlere ayırmaktır. Her özel bileşen daha sonra açık bir sorumluluğa sahip olacaktır. Kendi bileşenlerini ve bu bileşenle ilgili diğer tüm mantığı içerir.
Bunun nasıl yapılabileceğini anlamaya çalıştım ve Android belgelerinde "Bileşik Kontrol" olarak adlandırmak istedikleri bir şey buldum. (Bkz. Http://developer.android.com/guide/topics/ui/custom-components.html#compound ve kaydırarak "Bileşik Kontroller" bölümüne gidin) yapıyı görüntüle.
Belgelerde şöyle diyor:
Bir Activity'de olduğu gibi, içerilen bileşenleri oluşturmak için bildirim temelli (XML tabanlı) yaklaşımı kullanabileceğinizi veya bunları kodunuzdan programlı olarak iç içe yerleştirebileceğinizi unutmayın.
Bu iyi haber! XML tabanlı yaklaşım tam olarak istediğim şey! Ama "bir Aktivite ile olduğu gibi" dışında bunun nasıl yapılacağını söylemiyor ... Ama bir Aktivitede yaptığım şey setContentView(...)
, görünümleri XML'den şişirme çağrısı . Örneğin alt sınıfınız varsa bu yöntem kullanılamaz LinearLayout
.
Bu yüzden XML'i manuel olarak şu şekilde şişirmeye çalıştım:
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);
}
}
Bu, yüklediğim XML'nin LinearLayout
kök öğe olarak bildirilmesi dışında çalışır . Bu, şişkinliğin kendisi zaten LinearLayout
bir çocuk olan bir çocuk olmasıyla sonuçlanır !! Öyleyse şimdi arasına fazladan bir Doğrusal Yerleşim ve gerçekten ihtiyaç duyduğu görünümler var.MyCompoundComponent
LinearLayout
MyCompoundComponent
Biri bana fazladan bir LinearLayout
örneğe sahip olmaktan kaçınarak buna yaklaşmanın daha iyi bir yolunu sağlayabilir mi?