Blog

Eine bessere benutzerdefinierte ViewGroup

Barend Garvelink

Barend Garvelink

Aktualisiert Oktober 22, 2025
2 Minuten

Jerome P. kommentierte meinen früheren Beitrag , in dem er das ViewHolder-Muster anprangerte. Er schlug eine Verbesserung des ViewGroup-Ansatzes vor, die die Richtung der Abhängigkeit zwischen der ContactView und ihrer Layout-XML-Datei umkehrt. Anstatt die benutzerdefinierte Klasse aus der XML-Datei zu referenzieren, referenziert der Java-Code nun die Layout-Datei über eine Standard-Ressourcenreferenz. Dies erhöht die Typsicherheit und bedeutet, dass Ihre View-Klasse vollständig ProGuarded sein kann.

Die Implementierung des Listenadapters ist nun bequemer. Sie muss keinen Layout Inflater mehr verwenden, sondern kann einfach eine Instanz der View-Klasse erstellen: [code language="java"] public View getView(int position, View convertView, ViewGroup parent) { ContactView view; if (convertView == null) { view = new ContactView(context); // Was: view = (ContactView) inflater.inflate(R.layout.list_item, null); } // Fortsetzung. } [/code] Ändern Sie dazu das Wurzelelement des XML-Layouts in <verschmelzen/> und ändern Sie die Konstruktoren der benutzerdefinierten Ansichtsgruppe: [code language="java"] public class ContactView extends LinearLayout { // Private Felddeklarationen /* Geerbter Konstruktor. / public ContactView(Context context) { super(context); init(context); } /* Alle drei Konstruktoren rufen diese Methode auf. / private void init(Context context) { setOrientation(VERTICAL); LayoutInflater.from(context).inflate(R.layout.contact_view, this, true); nameView = (TextView) findViewById(R.id.contact_name); emailView = (TextView) findViewById(R.id.contact_email); addressView = (TextView) findViewById(R.id.contact_address); } // fortgesetzt [/code] Der vollständige Code für dieses Beispiel wurde dem 4-_better_custom_ViewGroup-Zweig des android-cciaa-Repository auf GitHub hinzugefügt.

Verfasst von

Barend Garvelink

Contact

Let’s discuss how we can support your journey.