[JAVA] Ein- und Ausklappen des Inhalts der Recycler-Ansicht

Einführung

Ich möchte den Inhalt der Recyclingansicht falten und dehnen!

device.gif

Verweise

Ich habe darauf hingewiesen. https://github.com/thoughtbot/expandable-recycler-view Dieser ist leichter zu verstehen! !!

Implementierung

Fügen Sie zunächst die Bibliothek build.gradle hinzu.

build.gradle


dependencies {
    compile 'com.thoughtbot:expandablerecyclerview:1.3'
    compile 'com.android.support:recyclerview-v7:25.3.1'
}

Erstellen Sie als Nächstes einen übergeordneten "ViewHolder" und einen untergeordneten "ViewHolder". ViewHolder ordnet Daten der auf dem Bildschirm angezeigten Ansicht zu. Natürlich gibt es eine übergeordnete und eine untergeordnete Ansicht, daher sind zwei ViewHolders erforderlich.

Parent_ViewHolder.java


Paket Dies ist mein Paket
import android.view.View;
import android.widget.TextView;

import com.thoughtbot.expandablerecyclerview.viewholders.GroupViewHolder;

public class Parent_ViewHolder extends GroupViewHolder {

    private TextView text1;

    public Parent_ViewHolder(View itemView) {//ID der übergeordneten Ansicht abrufen
        super(itemView);
        text1 = (TextView)itemView.findViewById(R.id.parenttext);
    }
    public void set(String i){//Ändern Sie die erfasste ID
        text1.setText(i);
    }
}

Child_ViewHolder.java


Paket Dies ist mein Paket;

import android.view.View;
import android.widget.TextView;

import com.thoughtbot.expandablerecyclerview.viewholders.ChildViewHolder;

public class Child_ViewHolder extends ChildViewHolder {

    private TextView text1;

    public Child_ViewHolder(View itemView) {//ID der untergeordneten Ansicht abrufen
        super(itemView);
        text1 = (TextView)itemView.findViewById(R.id.childtext);
    }
    public void set(String i){//Ändern Sie die erfasste ID
        text1.setText(i);
    }
}

Anschließend erstellen wir einen Adapter, der diese verknüpft. Ist es ein Ort, an dem Eltern und Kinder verwandt sind, also wie ein Zuhause? : raise_hand:

Home_Adapter.java


Paket Dies ist mein Paket;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.thoughtbot.expandablerecyclerview.ExpandCollapseController;
import com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;

import java.util.List;

public class Home_Adapter extends ExpandableRecyclerViewAdapter<Parent_ViewHolder, Child_ViewHolder> {

    private ExpandCollapseController expandCollapseController;

    public Home_Adapter(List<? extends ExpandableGroup> groups) {
        super(groups);
        this.expandCollapseController = new ExpandCollapseController(expandableList, this);
    }

    @Override
    public Parent_ViewHolder onCreateGroupViewHolder(final ViewGroup parent, final int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.parent_item, parent, false);
        return new Parent_ViewHolder(view);
    }

    @Override
    public Child_ViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_item, parent, false);
        return new Child_ViewHolder(view);
    }

    @Override
    public void onBindGroupViewHolder(Parent_ViewHolder holder, int flatPosition, ExpandableGroup group) {
        holder.set(String.valueOf(flatPosition));//Parent_Rufen Sie die von viewHolder erstellte Funktion auf
    }

    @Override
    public void onBindChildViewHolder(Child_ViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
        holder.set(String.valueOf(childIndex));//Child_Rufen Sie die von viewHolder erstellte Funktion auf
    }

}
  1. onCreateViewHolder Erweitert den Inhalt der angegebenen XML-Datei für die angegebene Ansicht.
  2. onBindViewHolder Wird von RecyclerView aufgerufen, um die Daten an der angegebenen Position anzuzeigen.

Als nächstes erstellen wir ein Layout, das in Beziehung gesetzt werden soll.

parent_item.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:background="@color/colorPrimaryDark"
        android:id="@+id/parenttext"
        android:text="Elternteil"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />
</LinearLayout>

child_item.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/childtext"
        android:text="Kind"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />
</LinearLayout>

Nachdem wir nun den Adapter und das Layout haben, führen wir ihn als Programm aus. : aufzeigen:

MainActivity.java


package jp.app.oomae.hisaki.expandable_recyclerview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

import static jp.app.oomae.hisaki.expandable_recyclerview.Home.makehome;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recyclerview);

        RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
        Home_Adapter adapter = new Home_Adapter(makehome());
        recyclerView.setAdapter(adapter);//Stellen Sie den Adapter ein
    }
}

Und lassen Sie uns eine Recycling-Ansicht auf dem Hauptbildschirm einrichten.

recyclerview.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <android.support.v7.widget.RecyclerView
        android:background="@color/colorAccent"
        android:id="@+id/recyclerview"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Als nächstes entscheiden wir, wie viele Eltern und Kinder angezeigt werden sollen. Diesmal ist es eine statische Implementierung, aber wenn Sie dies ändern, wird es meiner Meinung nach dynamisch sein. vielleicht,,, Implementieren Sie zunächst die übergeordneten und untergeordneten Datengruppen.

Parent.java


Paket mein Mann;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.util.List;

public class Parent extends ExpandableGroup<Child> {
    public Parent(String title, List<Child> items) {
        super(title, items);
    }
}

Child.java


Paket mein Mann;

import android.os.Parcel;
import android.os.Parcelable;

public class Child implements Parcelable {
    private String name;

    public Child(String name) {
        this.name = name;
    }

    protected Child(Parcel in) {
        name = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<Child> CREATOR = new Creator<Child>() {
        @Override
        public Child createFromParcel(Parcel in) {
            return new Child(in);
        }

        @Override
        public Child[] newArray(int size) {
            return new Child[size];
        }
    };
}

Als nächstes erstellen wir ein Haus, das "Parent.java" mit "Child.java" verknüpft. (Es ist unmöglich, ein Haus mit mehreren Eltern und mehreren Kindern zu haben, aber es fühlt sich wie eine Unterkunft an?)

Home.java


package jp.app.oomae.hisaki.expandable_recyclerview;

import java.util.Arrays;
import java.util.List;

public class Home{
    final private static int parents_num = 9;//Anzahl der Eltern
    final private static int child_num = 5;//Anzahl der Kinder

    public static List<Parent> makehome() {
        Parent[] num = new Parent[parents_num];
        for(int i = 0; i < parents_num; i++) {
            num[i] = new Parent("parent" + String.valueOf(i),receive_child());
        }
        return Arrays.asList(num);
    }

    public static List<Child> receive_child() {
        Child[] num = new Child[child_num];
        for(int i = 0; i < child_num; i++) {
            num[i] = new Child("child" + String.valueOf(i));
        }
        return Arrays.asList(num);
    }
}

Hier kombinieren wir die untergeordneten Daten und die übergeordneten Daten.

Das ist alles für den Code. Wir suchen Kritik und Kritik. : pattern_tone3:

Dieser Code

https://github.com/hisakioomae/Expandable_Recyclerview_sample/tree/master

Recommended Posts

Ein- und Ausklappen des Inhalts der Recycler-Ansicht
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
[Schienen] Überprüfen Sie den Inhalt des Objekts
Ersetzen Sie den Inhalt der Jar-Datei
Dies und das von JDK
[Ruby] Zeigt den Inhalt von Variablen an
[Rails] Lesen Sie das RSS der Site und geben Sie den Inhalt an die Vorderseite zurück
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Überprüfen Sie den Inhalt der Parameter mit pry
Jetzt habe ich die Grundlagen von RecyclerView zusammengefasst
Informationen zur Funktionsweise von next () und nextLine ()
[Ruby] Schneiden Sie den Inhalt von Twitter-Anzeigen ab
Korrigieren Sie die Stoppposition vonoothScrollToPosition von RecyclerView
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Der Inhalt der von CarrierWave gespeicherten Daten.
[Java] Inhalt der Collection-Schnittstelle und der List-Schnittstelle
Überprüfen Sie die installierte und aktivierte JDK-Version
Geben Sie die Summe jedes Namens und seines Inhalts aus dem Mehrfacharray aus
JAVA: jar, aar, zeige den Inhalt der Datei an
Denken Sie an die Kombination von Servlet und Ajax
Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
Vergleichen Sie die Geschwindigkeit der for-Anweisung und der erweiterten for-Anweisung.
[Java] Der verwirrende Teil von String und StringBuilder
Inhaltsverzeichnis Code Refactoring und verwandte Artikel
Ich habe die Eigenschaften von Java und .NET verglichen
Überschreiben Sie den Inhalt der Konfiguration mit Spring-boot + JUnit5
Ich möchte den Inhalt der Absicht var_dump
Lernen Sie den rudimentären Mechanismus und die Verwendung von Gradle 4.4 kennen
Informationen zu next () und nextLine () der Scannerklasse
Was sind die Vorteile von DI und Thymeleaf?
[Android 9.0 Pie Java] Implementieren Sie setOnTouchListener am Rand von RecyclerView und schließen Sie die Softtastatur
ArrayList und die Rolle der Schnittstelle aus List
Listen Sie den Inhalt von Kategorien auf, die mit Active Hash erstellt wurden
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Der Vergleich von enum ist == und gleich ist gut [Java]
[Grails] Über den Einstellungsbereich und die Einstellungselemente von application.yml
Konvertieren Sie das Array von error.full_messages in Zeichen und geben Sie es aus
Testen Sie den Inhalt einer Excel-Datei mit JUnit
Den aktuellen Status von Java organisieren und die Zukunft betrachten
Java-Sprache aus der Sicht von Kotlin und C #
Bis zur Verwendung von Spring Data und JPA Part 2
Überprüfung der Beziehung zwischen dem Docker-Image und dem Container
Bis zur Verwendung von Spring Data und JPA Part 1
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
[Technisches Memo] Über die Vor- und Nachteile von Ruby
[Rails] So erhalten Sie den Inhalt starker Parameter
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
Beurteilung des Kalenders
Die Welt der Clara-Regeln (4)
Die Welt der Clara-Regeln (1)
Die Welt der Clara-Regeln (3)
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Die Welt der Clara-Regeln (5)
Die Idee der schnellen Sortierung