Android - Vista composta personalizada gerada dinamicamente, recriada no RecyclerView, causando baixo desempenho
Estou usando um costumeCompoundView
que se estendeLinearLayout
para exibir itens de umRecyclerView
. Cada item exibe um artigo que contém vários parágrafos e imagens.
oCompoundView
acrescentaTextView
ouImageView
dinamicamente com base nos dados anexados porCompoundView.setData(List<DataPiece> pieces)
, cujo número é desconhecido antes dos dados serem anexados.
CadaDataPiece
objeto dizCompoundView
seja um pedaço de texto ou uma imagem. E aqui está o 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;
}
}
}
NoRecyclerView.Adapter.onBindViewHolder()
, os dados são anexados aCompoundView
chamandoMyViewHolder.compoundView.setData(...)
. E funciona bem quando oRecyclerView
é criado.
No entanto, para umCompoundView
item com múltiplosImageView
areiaTextView
s, quando eu me afasto dele e, em seguida, retrocesso, o pergaminho torna-se bastante suave.
Eu acho que é porqueremoveAllViews()
nosetData()
é chamado e oCompoundView
o loop for de criação é executado novamente pelo reciclador. Mas não sei como evitar isso.
E também me pergunto por que o pergaminho é sempre suave ao usarTextView
(com imagens) em umRecyclerView
até é reciclado também.
Desde já, obrigado!