So ändern Sie den viewType eines RecyclerView-Elements onClick

8

Ich habe einen RecyclerView mit Karten als primären Viewtyp erstellt. Was ich versuche zu erreichen, ist, dass, wenn der Benutzer auf ein Element klickt, der ViewType dieses Elements von den Karten zu einem anderen Viewtyp geändert wird (zum Beispiel eine Liste Textansichten, die horizontal scrollbar sind).

Mein Code für RecyclerView Adapter lautet wie folgt:

Im unteren Teil des Codes habe ich eine Arranyliste von Enum-Typen erstellt, um den Klickstatus jeder Zeile in der Recycleransicht zu verfolgen, dann habe ich die Größe meines Datasets und initialisierte meine Arraylist für jede Zeile mit SHOW_PRIMARY_CONTENT

%Vor%

Unten ist meine ViewHolder-Klasse, die Verweise auf alle meine untergeordneten Ansichten enthält. Sie implementiert View.OnClickListener. Warum es View.OnClickListener implementiert, ist so, dass es zwischen geklickten Zuständen wechseln kann, um viewTypes entsprechend zu ändern.

%Vor%

Hier bekomme ich den Wert von viewType, der von getItemViewType zurückgegeben wird und das überhöhte Layout zurückgibt

%Vor%

Dann binde ich hier die Ansichten mit Werten entsprechend dem viewType, der vom viewholder zurückgegeben wird, mit viewholder.getItemViewType

%Vor%

Und schließlich meine getItemViewType-Logik

%Vor%

Was ich nicht verstehen konnte, ist, warum nichts angezeigt wird, wenn ich den Code ausführe, scheint mir alles zu gelten. Hilf mir !!!!

    
Anudeep Samaiya 11.04.2015, 15:40
quelle

3 Antworten

4

siehe mein Beispiel:

%Vor%

bei mir funktioniert es gut

    
vuhung3990 19.06.2015 14:14
quelle
2

Ich hoffe, Sie haben Ihr Problem herausgefunden. Wenn nicht, dann habe ich es für dich getan. Die fehlerhafte Zeile ist

%Vor%

Hier fügen Sie ein neues Element zu

hinzu %Vor%

Dadurch wird ein neues Element eingefügt, und die Größe von mdataList und itemClickState unterscheidet sich, und daher tritt eine falsche Übereinstimmung auf.

Verwende itemClickedState.set(getAdapterPosition(), clickedState.SHOW_SECONDARY_CONTENT);  stattdessen. Und zweitens verstehe ich nicht was tvTicketClass ist. Wenn es eine einzelne TextView ist, dann sollten Sie die Zeichenfolge zuerst verketten und sie tun tvTicketClass.settext(concatenatedstrClass) . Hoffe, Sie werden von diesem Beitrag geholfen. Wenn Sie ein weiteres Problem haben, kommentieren Sie bitte.

    
Mahendra Chhimwal 01.09.2015 06:15
quelle
0

überschreibt getItemViewType im Adapter und gibt den gewünschten Elementtyp zurück. Weitere Informationen finden Sie unter Ссылка

    
Sadashiv 14.10.2015 09:25
quelle