2015-06-02 7 views
5

Desidero uno stile ListView RecyclerView con un'intestazione in cima, E non voglio che la vista dell'intestazione venga riciclata, MAI.RecyclerView con LinearLayoutManager con vista dell'intestazione che non ricicla

Sono totalmente nuovo per RecyclerView e LinearLayoutManager ma penso che quello che voglio, non dovrebbe essere troppo difficile estendendo LinearLayoutManager.

Ulteriori informazioni nel caso in cui aveva bisogno, ma penso che quanto sopra è sufficiente:

Ho già un RecyclerView in vista di testa in posizione 0. Quella parte era abbastanza facile con l'aiuto di SO risposte. Ma la vista viene riciclata, causando molti problemi con le viste EditText nell'intestazione (cercando di mantenere l'attenzione, ripristinare l'attenzione, mantenere visibile il caret, non fare cose strane con la funzione di correzione automatica, continuare a digitare mentre EditText è tecnicamente andato/riciclato, ecc.). Quindi la soluzione semplice sarebbe quella di non avere quella vista riciclata, che penso sia possibile con un gestore di layout personalizzato, ma non ho idea da dove cominciare.

Non riesco semplicemente a posizionare la vista dell'intestazione sopra la mia lista, perché voglio farlo scorrere nell'elenco (è troppo alto per essere fissato nella parte superiore dello schermo tutto il tempo).

+1

Sarebbe ancora più semplice assegnare tale posizione a un tipo di vista univoco. Avere 'getItemViewType()' restituisce un valore diverso per posizione '0' da tutte le altre posizioni. Quindi, quella vista non sarà mai riciclata, perché non c'è niente da riciclare, oltre alla posizione '0'. – CommonsWare

+0

Lo faccio già, ma sono abbastanza sicuro che venga riciclato comunque, anche se non sono sicuro al 100% come controllarlo. So che onBind viene chiamato nuovamente per la vista dell'intestazione, ogni volta che scorre fuori dalla vista e poi di nuovo dentro ... quindi questa è una ragione per cui penso che venga comunque riciclata. – eselk

+0

Tutti gli altri bug che sto vedendo, e altri motivi presumo che vengano riciclati, sono simili a ciò che vedresti se hai un EditText con lo stato attivo (tastiera aperta, digitandolo) e lo rimuovi, senza prima dare qualcos'altro al centro. Difficile da spiegare, ma la tastiera/sistema operativo non è felice quando ciò accade. – eselk

risposta

1

LayoutManager ha LayoutManager#ignoreView(View) interfaccia che secondo la documentazione,

Flags una vista in modo che non saranno demoliti o riciclato.

Sembra che cosa avete bisogno qui

EDIT Google sviluppatori hanno commentato (here) che questo flag serve qualche altro scopo, quindi non è intenzione di risolvere "RecyclerView Header" problema. Tuttavia, stanno lavorando sulla soluzione, quindi tieni duro e rimani sintonizzato

+0

oh wow, questo potrebbe essere una vita più sicura, testerà questo ASAP e riferire indietro - grazie! – eselk

+0

@eselk non mi piace portare cattive notizie, ma sembra che il flag "ignora" abbia qualche altro scopo :(controlla questo: https://code.google.com/p/android/issues/detail?id= 176602 & can = 1 & q = reporter% 3ADudka & colspec = ID% 20Type% 20Status% 20Owner% 20Summary% 20Stars –

+0

Sto cercando di capirlo, ma per caso l'hai già usato prima?Cercando di capire cosa significa questa parte "Puoi chiamare questo metodo solo se il tuo LayoutManger è in modalità onLayout o onScroll callback." - Intendono onLayoutChildren, e ho bisogno di sottoclasse LayoutManager per agganciarlo? – eselk

Problemi correlati