Vista personalizada con diseño XML en Android

Tengo un ListAdapter con una gran cantidad de diseños diferentes para las filas. Para tener un código limpio Quiero subcontratar los diseños para las filas de getView () del adaptador en las clases de vista. ¿Es posible inflar un diseño XML en una vista personalizada? Sólo he encontrado el LayoutInflater pero devuelve una vista y eso no ayuda. Quiero tener algo como el setLayout () de una actividad. es posible?

¡Gracias!

Puede tener una vista de fila personalizada e inflar su xml en su constructor:

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

Y luego usar la merge en my_row.xml :

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

El elemento de merge hace que sus hijos se agreguen como hijos de su vista personalizada. Consulte Fusionar diseños para obtener más información.

Yo alwas utilizar un adaptador personalizado con un espectador como:

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

}

  • Contenedor personalizado para Android (hexagonal) con adaptador
  • Android: cómo determinar la última letra totalmente visible en TextView?
  • Eliminar un oyente de una vista en android
  • Presentar contenido html como "páginas dinámicas"
  • Android: Layout.addView () no funciona
  • Android - Obtener el widget del cronómetro
  • ¿Cómo dibujar una vista encima de todo?
  • Android: Redibujar una vista específica dentro de un diseño
  • Deslizar a otra vista en recyclerVer con ItemTouchHelper
  • Reseting el color de fondo de una vista
  • ¿Cómo usar la aleta de vista con tres diseños?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.