Android: vista compuesta personalizada generada dinámicamente recreada en RecyclerView, que causa un bajo rendimiento
Estoy usando una costumbreCompoundView
que se extiendeLinearLayout
para mostrar elementos de unRecyclerView
. Cada elemento muestra un artículo que contiene múltiples párrafos e imágenes.
losCompoundView
agregaTextView
oImageView
basado dinámicamente en los datos adjuntos porCompoundView.setData(List<DataPiece> pieces)
, cuyo número se desconoce antes de que se adjunten los datos.
CadaDataPiece
objeto diceCompoundView
ya sea un texto o una imagen. Y aquí está el código paraCompoundView.setData(List<DataPiece> pieces)
:
public void setData(List<DataPiece> pieces) {
removeAllViews();
for (DataPiece dataPiece : pieces) {
switch (dataPiece.getType()) {
case IMAGE:
ImageView imageView = new ImageView(getContext());
...
addView(imageView);
break;
case TEXT:
TextView textView = new TextView(getContext());
...
addView(textView);
break;
}
}
}
En elRecyclerView.Adapter.onBindViewHolder()
, los datos se adjuntan aCompoundView
llamandoMyViewHolder.compoundView.setData(...)
. Y funciona bien cuando elRecyclerView
es creado.
Sin embargo, por unCompoundView
artículo con múltiplesImageView
s yTextView
s, cuando me alejo de él y luego retrocedo, el desplazamiento se vuelve muy suave.
Supongo que es porqueremoveAllViews()
ensetData()
se llama y elCompoundView
El reciclador ejecuta nuevamente el for-loop. Pero no sé cómo evitar esto.
Y también me pregunto por qué el desplazamiento siempre es suave cuando se usaTextView
(con imágenes) en unRecyclerView
Incluso es reciclado también.
¡Gracias por adelantado!