El elemento de vista del reciclador llena la altura de la vista del reciclador completo después de actualizar la biblioteca de soporte de “23.1.1” a “23.2.1”
Anteriormente, estoy usando las siguientes bibliotecas de soporte antiguas "23.1.1".
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:preference-v7:23.1.1'
compile 'com.android.support:preference-v14:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
Funciona bastante bien Así es como miRecyclerView
parece
Ahora, deseo migrar a "23.2.1", debido a algunas correcciones de errores realizadas.
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:preference-v7:23.2.1'
compile 'com.android.support:preference-v14:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
Sin embargo, de repente, todos misRecyclerView
artículos, parecen llenar elRecyclerView
Altura total.
Aquí está el fragmento de código de mi archivo de diseño:https://gist.github.com/yccheok/241a0d38d56305a1be24d09b54eb1600
Lo que realmente me desconcierta es que, aunque estoy usando"wrap_content"
en mi diseño de elemento de vista de reciclador, no funciona como se esperaba.
No uso ningún administrador de diseño personalizado para miRecyclerView
.
Dehttp://developer.android.com/tools/support-library/index.html, Me doy cuenta de que 23.2.1 hace bastantes cambios enRecyclerView
esta vez.
RecyclerView
no permite cambios de adaptador mientras se calcula un diseño o desplazamiento. (Edición 202046)Se corrigió un bloqueo al llamarnotifyItemChanged()
en un elemento que está fuera de la vista. (Problema 202136)Se corrigió un bloqueo que ocurre cuandoRecyclerView.LayoutManager
agrega y elimina una vista en el mismo paso de medición. (Edición 193958)Lo que más sospecho eshttps://code.google.com/p/android/issues/detail?id=201856 , ya que implica cambiarvarios métodos de medida y especificaciones
Hasta ahora, trato de reproducir el problema con un simpleRecyclerView
proyecto, con 23.2.1 pero falló! No tiene "el elemento llena elRecyclerView
problema de altura completa ". Supongo que mi proyecto simple no simula la estructura de diseño complejo de mi proyecto de producción. Mi proyecto de producción tiene el siguiente diseño
<Activity>
<Fragment>
<View Pager>
<Fragment>
<RecyclerView />
</Fragment>
</View Pager>
</Fragment>
</Activity>
Después de depurar durante unas horas, todavía no puedo encontrar la causa raíz de tal problema, ¿alguna sugerencia?
Gracias.
Lo que había intentadoHabía tratado de cambiarRecyclerView
de
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
a
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
Se ve bien al principio. Sin embargo, cuando realiza el desplazamiento, la cosa no funciona como se esperaba:https://www.youtube.com/watch?v=U2EChFn6WkI
ACTUALIZACIÓN: finalmente descubro la causa raízEs un error a mi lado! Como necesito tener un margen diferente para el último elemento de la fila, aquí está mi código de adaptador.
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final List<TransactionSummary> transactionSummaries = buyArray.transactionSummaries;
if (position == transactionSummaries.size() - 1) {
holder.itemView.setLayoutParams(lastLayoutParams);
} else {
holder.itemView.setLayoutParams(normalLayoutParams);
}
Desafortunadamente,lastLayoutParams
ynormalLayoutParams
se está inicializando como
normalLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
lastLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
UtilizandoLinearLayout.LayoutParams.WRAP_CONTENT
resolver el problema.