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!

2 Solutions collect form web for “Vista personalizada con diseño XML en Android”

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

}

  • Android SlidingPaneLayout se desvanece en las vistas incorrectas
  • Vista de niño androide sin estado de prensa
  • TextView dentro de ViewPager intercepta eventos de toque
  • Android: uso de la vista personalizada en el widget
  • ¿Cómo extender la vista de la disposición del cajón?
  • El método getDrawingCache () de Android 2.1 View devuelve siempre null
  • ¿Qué hace android: isScrollContainer hacer?
  • Butterknife vs AndroidAnnotations
  • Android: ¿Proporciona sugerencias de búsqueda recientes sin actividad de búsqueda?
  • Vista de búsqueda separada para fragmentos
  • Android Material Design SearchView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.