6

In questo momento sto giocando con RecyclerView e sono incappato nel seguente problema. Quando il documento LinearLayoutManager di RecyclerView prende una decisione sul fatto che la visualizzazione sia stata disattivata (quindi può essere riciclata) non tiene conto della vista translationY.RecyclerView non rispetta la traduzione quando si riciclano le viste

Quindi, in sostanza, quando si scorre verso l'alto e ho una vista positiva con translationY, LinearLayoutManager si pensa che la vista sia fuori dallo schermo, ma in realtà è ancora visibile (perché è stata tradotta).

Ho notato che il modo in cui si prende questa decisione è LinearLayoutManager, è guardando getDecoratedBottom(View), quindi ho provato a sovrascrivere getDecoratedBottom(View) per includere anche la traduzione. Sfortunatamente, il layout è completamente disordinato, quindi i nuovi elementi ottengono una traduzione aggiuntiva (in aggiunta a quella esistente).

C'è un modo semplice per dire LinearLayoutManager per cercare translation attributo quando prende una decisione sul riciclo della vista senza implementare nuovamente LayoutManager da zero?

+0

Avete trovato una soluzione per il problema? –

+0

@ZakharovRoman yeah ... Implementazione di LinearLayoutManager con forked e modificato la sua logica un po 'per includere anche la traduzione. Ma nulla di "fuori dagli schemi" potrebbe effettivamente risolvere il problema. –

+0

ok, ci proverò. grazie –

risposta

0

Potrebbe essere utile a qualcuno, ho trovato una soluzione.

In primo luogo, ho provato a utilizzare Translate animation senza fortuna. Ma poi, ho appena creato una nuova classe che estende ItemDecoration. Quindi, sostituito con getItemOffsets() e impostare l'offset corretto su Rect. LayoutManager calcola correttamente questi offset. Il risultato ottenuto è sull'immagine allegata.

+0

beh, non sono sicuro che funzionerà nel mio caso da quando cambio traduzione su ogni frame. Non so davvero le implicazioni di cambiare l'offset della decorazione così spesso. –