Adaptador de ListView con un número arbitrario de tipos de filas (no sé el número de tipos de filas diferentes)

Por lo tanto, estoy haciendo esta aplicación. La aplicación analiza un sitio web, o más específicamente un vbulletin-board. Cuando estoy analizando un hilo en el foro, lo he dividido de manera que cuando analizo cada publicación en ese hilo, obtengo el contenido real de la publicación en secciones como esta, y almaceno las secciones en el orden correcto en una matriz:

[Plain text]
[Quote from somebody]
[Plain text]
[Another quote]
[Another quote again]
[Some more plain text]

Sin embargo, una publicación puede organizarse en cualquier orden que sepas, y puede constar de más o menos secciones que en el ejemplo, y tampoco tiene que tener comillas, o podría ser solo una o varias comillas. . Todo es posible.

Cuando enumero las publicaciones en mi aplicación, estoy usando un ListView. Cada fila de esta vista de lista entoncessiempre consiste en un encabezado, y cualquier combinación de las secciones mencionadas anteriormente.

La forma en que pensaba hacerlo después de buscar un poco en Google es tener un "Diseño base" con solo una etiqueta de diseño en un archivo XML, y un diseño separado para cada sección, almacenado en archivos XML separados, y en cada llamada a getView () en mi adaptador, mire la publicación en esa posición en mi "Lista de publicaciones", y luego recorra las secciones de esa publicación en particular, e infle un nuevo "Diseño de cotización" para cada cita -sección almacenada en la publicación, e inflar un "diseño de texto sin formato" para cada sección de texto sin formato en la publicación. Y para cada uno de ellos relleno todo el contenido que pertenece a esa publicación.

Creo que esto funcionaría, pero podría haber un problema de rendimiento? Como entiendo, la inflación del diseño es bastante costosa, y tampoco podré reciclar la Vista que se pasa a getView (), ya que podría tener un montón de secciones agregadas que quizás no necesite en otra llamada para obtenerView () .. Es decir, si entiendo getView () y el reciclaje de alguna manera.

Este es un ejemplo básico de lo que quiero decir con el método getView () del adaptador:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    // Inflate the base-layout, which the others are added to.
    view = mInflater.inflate(R.layout.forum_post,null);

    View header = mInflater.inflate(R.layout.post_header_layout, null);
    View message = mInflater.inflate(R.layout.post_text_layout, null);
    View quote = mInflater.inflate(R.layout.post_quote_layout, null);

    ((ViewGroup)view).addView(header);
    ((ViewGroup)view).addView(message);
    ((ViewGroup)view).addView(quote);
    return view;
}

Y luego infle más citas-vistas / mensajes-vistas según sea necesario cuando extraigo los datos de mi lista de publicaciones guardadas.

El diseño base es solo una etiqueta LinearLayout

Los diseños que inflo son solo RelativeLayouts con algunos TextViews y un ImageView agregado.

Este código produce este resultado, donde tengo unEncabezamiento Con nombre de usuario, foto, etc., una sección de.Texto sin formato, y unoCotización de la sección. Sin embargo, esto no parece funcionar correctamente todo el tiempo, porque cuando lo probé hace un momento, una copia de la lista se quedó atascada en el fondo y otra más se desplazó sobre ella.

http://s14.postimg.org/rizid8q69/view.png

¿Hay una mejor manera de hacer esto? Porque me imagino que esto no es muy eficiente.

Respuestas a la pregunta(3)

Su respuesta a la pregunta