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.

Se corrigieron errores relacionados con varios métodos de medida y especificación. (Edición 201856)Reducido el período de bloqueo en el queRecyclerView 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 intentado

Habí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íz

Es 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.

Respuestas a la pregunta(7)

Su respuesta a la pregunta