Guten Tag, liebe Leser.
In meinem Artikel möchte ich eine Implementierung der Baumansicht für RecyclerView freigeben. Ohne zusätzliche Bibliotheken und ohne untergeordnetes Array.
Wen kümmert es bitte unter der Katze. Ich werde versuchen, so viel wie möglich zu beschreiben, was und wie.

Das Prinzip beim Erstellen einer Liste von Elementen besteht darin, dass untergeordnete Elemente angezeigt oder ausgeblendet werden.
Obwohl ich sagte, dass die Implementierung ohne zusätzliche Bibliotheken sein wird, müssen Standardbibliotheken noch verbunden werden.
Verbundene Bibliothekendependencies { implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support:design:26.1.0' implementation 'com.android.support:recyclerview-v7:26.1.0' }
Das Markup ist sehr gering - nur die RecyclerView-Liste.
Markup <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler_list"> </android.support.v7.widget.RecyclerView> </RelativeLayout>
Zusätzlich benötigen wir eine separate Klasse, in der wir die Listenwerte speichern.
Klasse für Daten Data.java public final class Data { private String valueText = "";
Die Kommentare sollten klar sein, aber ich werde es erklären. Für jedes Element der Liste speichern wir den Bezeichner
valueId , den Namen
valueText , den Bezeichner des übergeordneten Elements
parentId , eine Bezeichnung, die angibt, dass das Element das übergeordnete
ElementParent ist, und den Sichtbarkeitswert für die
untergeordneten Elemente von
childVisibility .
Der nächste vorbereitende Schritt besteht darin, ein Markup für das Listenelement selbst zu erstellen.
Markup für item.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/item" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.AppCompatImageView android:id="@+id/icon_tree" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/icon_hide" android:visibility="gone" app:backgroundTint="@color/colorPrimary" android:layout_centerVertical="true"/> <LinearLayout android:id="@+id/block_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/icon_tree"> <TextView android:id="@+id/value_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:foreground="?android:attr/selectableItemBackground" android:text="sdfdsf"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/colorPrimary" android:layout_below="@+id/block_text" android:layout_marginTop="4dp" android:layout_marginLeft="4dp" android:layout_marginRight="4dp"/> </RelativeLayout> </LinearLayout>
AppCompatImageView wird benötigt, um den Status des übergeordneten Elements anzuzeigen.
TextView - um den Wert eines Elements anzuzeigen.
Die Ansicht dient nur zum Teilen.
Der letzte vorbereitende Schritt besteht darin, eine Klasse für den Listenadapter zu erstellen.
Adapter für Liste RecyclerViewAdapter.java public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { private View vv; private List<Data> allRecords;
Die Hauptverarbeitung erfolgt in der Prozedur
onBindViewHolder . Für jedes Element der Liste werden seine Kennung, sein Wert und seine Parameter des übergeordneten Werts erhalten. Ein- oder Ausblenden von untergeordneten Elementen sowie eines Statussymbols für das übergeordnete Element. Nun, die Verarbeitung von Klicks auf die Liste ist hängen geblieben. Dann entscheidet jeder, wie er die Liste bearbeiten muss. Das Beispiel zeigt einfach eine Nachricht mit ID und Elementwert.
Bei der Prozedur zum
Ein- oder Ausblenden des
untergeordneten setVisibility-Elements wird der Text für das
untergeordnete Element zusätzlich mit 80 Pixel eingerückt.
Es bleibt nur, die Liste an der richtigen Stelle auszufüllen.
Listenerstellung List<Data> records = new ArrayList<Data>();
Das Ergebnis ist eine so einfache Liste mit Unterstützung für untergeordnete Elemente. Mit dieser Implementierung können Sie mehrere verschachtelte Elemente ausfüllen. Sie müssen den Einzug für untergeordnete Elemente jedoch leicht verfeinern, wenn die Verschachtelungsebene mehr als 1 beträgt.
Vielen Dank für Ihre Aufmerksamkeit und Ihre erfolgreichen Projekte.