Benutzerdefinierte Ansicht mit XML-Layout in Android

Ich habe einen ListAdapter mit vielen verschiedenen Layouts für die Zeilen. Um einen sauberen Code zu haben, möchte ich die Layouts für die Zeilen aus dem getView () des Adapters in View-Klassen auslagern. Ist es möglich, ein XML-Layout in eine benutzerdefinierte Ansicht aufzublasen? Ich habe nur die LayoutInflater gefunden, aber es gibt eine Ansicht und das hilft nicht. Ich möchte so etwas wie das setLayout () einer Aktivität haben. Ist das möglich?

Vielen Dank!

  • Android: Fehler beim Umwandeln von Byte in dex
  • Was ist <permission-tree> in android manifest? Wie kann man das nutzen?
  • Floating Action Button erscheint über Navigation Schublade
  • Eclipse-Fehler: NoClassDefFoundError: java / lang / ref / FinalReference
  • Wie kann man Benutzern erlauben, die letzte App-Version aus der App zu überprüfen?
  • Konfiguriere IntelliJ IDEA so, dass die Quelle in git erkannt wurde, aber nicht registrierte Vcs-Wurzel erkannt wurde
  • Synchrone und asynchrone Aktivitäten
  • Kann ich Android Studio (Android SDK Emulator) in einer Microsoft Hyper-V Virtual Machine ausführen?
  • Wie man eine Bildansicht mit dem Benutzer Finger auf Android Emulator zu bewegen
  • Debug App in Galaxy S5
  • Deaktivieren Sie Word Wrap in einem Android Multi-Line TextView
  • RingtonePreference Standardwert
  • 2 Solutions collect form web for “Benutzerdefinierte Ansicht mit XML-Layout in Android”

    Sie können eine benutzerdefinierte Zeilenansicht haben und Ihre XML in ihrem Konstruktor aufblasen:

    public MyRow extends LinearLayout { public MyRow(Context context) { super(context); LayoutInflater.from(context).inflate(R.layout.my_row, this, true); ... other initialization ... } } 

    Und dann merge in my_row.xml :

     <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> ... your row layout ... </merge> 

    Das merge Element verursacht, dass seine Kinder als Kinder Ihrer benutzerdefinierten Ansicht hinzugefügt werden. Check out Merging Layouts für weitere Informationen.

    Ich habe auch einen benutzerdefinierten Adapter mit einem Viewholder wie:

     public class CalendarAdapter extends BaseAdapter { protected static CalViewHolder holder; private LayoutInflater mInflater; public HashMap<Integer,String[]> appointments = new HashMap<Integer,String[]>(); public CalendarAdapter(Context context,HashMap<Integer,String[]> set_appointments) { // Cache the LayoutInf mInflater = LayoutInflater.from(context); appointments = set_appointments; } @Override public int getCount() { // TODO Auto-generated method stub return appointments == null ? 0:appointments.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.xml.appointment, null); holder = new CalViewHolder(); holder.app_lay = (LinearLayout) convertView.findViewById(R.id.appointment_layout); holder.app_head = (TextView) convertView.findViewById(R.id.appointment_head); holder.app_body = (TextView) convertView.findViewById(R.id.appointment_body); convertView.setTag(holder); }else{ holder = (CalViewHolder) convertView.getTag(); } holder.app_head.setText(appointments.get(position)[0]); holder.app_body.setText(appointments.get(position)[1]); return convertView; } static class CalViewHolder { LinearLayout app_lay; TextView app_head; TextView app_body; } 

    }

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.