2015-06-02 8 views
5

Ich möchte eine ListView-Stil RecyclerView mit einer Kopfzeile an der Spitze, UND ich möchte nicht die Header-Ansicht, recycelt werden, EVER.RecyclerView mit LinearLayoutManager mit Header-Ansicht, die nicht recycelt

Ich bin völlig neu zu RecyclerView und LinearLayoutManager aber ich denke, was ich will nicht allzu schwer LinearLayoutManager durch die Erweiterung sein sollte.

Zusätzliche Informationen, falls erforderlich, aber ich denke, die oben genug ist:

ich bereits eine RecyclerView mit einem Kopfsicht an Position 0. Der Teil von SO Antworten mit Hilfe leicht genug war. Aber die Ansicht wird wiederverwertet, was zu vielen Problemen mit den EditText-Ansichten in der Kopfzeile führt (Fokus behalten, Fokus wiederherstellen, Caret sichtbar halten, keine seltsamen Dinge mit Auto-Correct-Funktion machen, weiterschreiben, während EditText technisch weg ist)/recycelt, usw.). Die einfache Lösung wäre also, diese Ansicht nicht zu recyceln, was meiner Meinung nach mit einem benutzerdefinierten Layout-Manager möglich ist, aber ich habe keine Ahnung, wo ich anfangen soll.

Ich kann nicht einfach die Header-Ansicht über meine Liste platzieren, weil ich möchte, dass sie mit der Liste scrollt (sie ist zu groß, um die ganze Zeit am oberen Bildschirmrand zu fixieren).

+1

Es wäre noch einfacher, nur dieser Position einen eindeutigen Ansichtstyp zuzuweisen. Hat 'getItemViewType()' einen anderen Wert für die Position '0' von allen anderen Positionen zurückgegeben. Dann wird diese Ansicht niemals wiederverwendet, da es nichts anderes gibt, als sie zu recyceln, außer der Position "0". – CommonsWare

+0

Ich mache das eigentlich schon, aber ich bin mir ziemlich sicher, dass es sowieso recycelt wird, obwohl ich mir nicht 100% sicher bin, wie ich das überprüfen soll. Ich weiß, dass OnBind für die Header-Ansicht erneut aufgerufen wird, jedes Mal, wenn es aus der Sicht und dann wieder zurück scrollt ... also ist das ein Grund, warum es noch recycelt wird. – eselk

+0

Alle anderen Fehler, die ich sehe, und andere Gründe, die ich vermute, dass sie recycelt werden, ähneln denen, die Sie sehen würden, wenn Sie einen EditText mit dem Fokus haben (Tastatur öffnen, tippen) und ohne es zu entfernen zuerst etwas anderes geben Fokus. Schwer zu erklären, aber die Tastatur/das Betriebssystem ist einfach nicht glücklich, wenn das passiert. – eselk

Antwort

1

LayoutManager hat LayoutManager#ignoreView(View)-Schnittstelle, die in der Dokumentation nach,

Flags eine Ansicht, so dass es nicht verschrottet oder recycelt werden.

Sieht aus wie das, was Sie hier benötigen

EDIT Google Devs kommentiert (here), dass dieses Flag anderen Zwecken dient, so ist es nicht gonna lösen "RecyclerView Header" Problem. Sie arbeiten jedoch an der Lösung, also halten Sie fest und bleiben Sie dran

+0

oh wow, das könnte ein Leben sicherer, wird dies so schnell wie möglich testen und melden Sie zurück - danke! – eselk

+0

@eselk mag es nicht, schlechte Nachrichten zu bringen, aber es scheint wie "ignorieren" -Flag dient einen anderen Zweck :(check this out: https://code.google.com/p/android/issues/detail?id= 176602 & can = 1 & q = reporter% 3ADudka & colspec = ID% 20Typ% 20Status% 20Owner% 20Summary% 20Stars –

+0

Ich versuche es herauszufinden, aber hast du das zufällig schon einmal benutzt?Der Versuch, herauszufinden, was dieser Teil bedeutet "Sie können diese Methode nur aufrufen, wenn sich Ihr LayoutManger im OnLayout- oder OnScroll-Callback befindet." - Bedeuteten sie onLayoutChildren, und ich muss den LayoutManager ableiten, um das zu haken? – eselk

Verwandte Themen