Android - Eine benutzerdefinierte (zusammengesetzte) Komponente schreiben

Android app ich bin derzeit an der Entwicklung hat eine zentrale Aktivität, die inzwischen ziemlich groß. Dies ist vor allem, weil es enthält ein TabWidget mit 3 tabs. Jedes tab hat durchaus ein paar Komponenten. Die Aktivität hat sich zur Steuerung all dieser Komponenten auf einmal. Also ich denke, man kann sich vorstellen, dass diese Aktivität hat, wie 20 Felder (ein Feld für fast jede Komponente). Auch enthält es eine Menge Logik (klicken Sie auf die Zuhörer, die Logik zu füllen, Listen, etc).

Was ich normalerweise nicht in component based frameworks ist alles geteilt, bis in benutzerdefinierten Komponenten. Jede benutzerdefinierte Komponente wäre dann eine klare Verantwortung. Es enthält seinen eigenen Komponenten und alle anderen Logik-einen Bezug zu dieser Komponente.

Ich versuchte herauszufinden, wie dies geschehen kann, und ich fand etwas, was in der Android-Dokumentation was Sie gerne nenne "Compound Control". (Siehe http://developer.android.com/guide/topics/ui/custom-components.html#compound und navigieren Sie zu dem "Zusammengesetzte Steuerelemente" Abschnitt) ich möchte diese Komponente basiert auf einem XML-Dateien zur Definition der Struktur anzeigen.

In der Dokumentation heißt es:

Beachten Sie, dass nur wie mit einer Aktivität,
Sie können entweder das deklarative
(XML-basierten) Ansatz zur Erstellung der
enthaltenen Komponenten, oder Sie können nest
Sie programmgesteuert aus dem code.

Gut, das sind gute Neuigkeiten! Der XML-basierte Ansatz ist genau das, was ich will!!! Aber es sagt nicht, wie es zu tun, außer dass es ist "wie mit einer Aktivität,"... Aber was mache ich in einer Tätigkeit ist, rufen setContentView(...) aufblasen, um den Blick von XML. Diese Methode ist nicht verfügbar, wenn Sie beispielsweise eine Unterklasse LinearLayout.

So, ich versuchte zu Blasen die XML manuell so:

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);
    }
}

Dieser Werke, außer der Tatsache, dass das XML, das ich bin laden hat LinearLayout erklärt wie das root-element. Dies führt in der aufgeblasenen LinearLayout ein Kind von MyCompoundComponent das selbst ist schon ein LinearLayout!! So, jetzt haben wir eine redundante LinearLayout zwischen MyCompoundComponent und die Ansichten, die es tatsächlich benötigt.

Kann jemand bitte geben Sie mir einen besseren Weg, dies zu nähern, vermeiden, dass eine redundante LinearLayout instanziiert?

Kommentar zu dem Problem
Ich Liebe Fragen, die ich etwas lernen. Danke. Kommentarautor: Jeremy Logan
Ich schrieb vor kurzem einen blog-Eintrag dazu: blog.jteam.nl/2009/10/08/exploring-the-world-of-android-part-3 Kommentarautor: Tom van Zummeren

InformationsquelleAutor der Frage Tom van Zummeren | 2009-09-25

Schreibe einen Kommentar