[JAVA] Pliage et dépliage du contenu de la vue Recycleur

introduction

Je veux plier et étirer le contenu de la vue de recyclage!

device.gif

Les références

J'en ai parlé. https://github.com/thoughtbot/expandable-recycler-view Celui-ci est plus facile à comprendre! !!

la mise en oeuvre

Tout d'abord, ajoutez la bibliothèque build.gradle.

build.gradle


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

Ensuite, créez un ViewHolder '' pour parent uniquement et un ViewHolder '' pour enfant uniquement. ViewHolder associe les données à la vue affichée à l'écran. Bien sûr, il existe une vue parent et une vue enfant, donc deux ViewHolders sont nécessaires.

Parent_ViewHolder.java


package Ceci est mon package
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) {//Obtenir l'identifiant de la vue parent
        super(itemView);
        text1 = (TextView)itemView.findViewById(R.id.parenttext);
    }
    public void set(String i){//Changer l'identifiant acquis
        text1.setText(i);
    }
}

Child_ViewHolder.java


package Ceci est mon package;

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) {//Obtenir l'identifiant de la vue enfant
        super(itemView);
        text1 = (TextView)itemView.findViewById(R.id.childtext);
    }
    public void set(String i){//Changer l'identifiant acquis
        text1.setText(i);
    }
}

Ensuite, nous allons créer un adaptateur qui les associe. Est-ce un endroit où parents et enfants sont liés, c'est-à-dire comme une maison? : main_levée:

Home_Adapter.java


package Ceci est mon package;

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_Appelez la fonction créée par viewHolder
    }

    @Override
    public void onBindChildViewHolder(Child_ViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
        holder.set(String.valueOf(childIndex));//Child_Appelez la fonction créée par viewHolder
    }

}
  1. onCreateViewHolder Étend le contenu du fichier xml spécifié pour la vue spécifiée.
  2. onBindViewHolder Appelé par RecyclerView pour afficher les données à la position spécifiée.

Ensuite, nous allons créer une mise en page à relier.

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="parent"
        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="Enfant"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />
</LinearLayout>

Ensuite, maintenant que nous avons l'adaptateur et la mise en page, exécutons-le en tant que programme. : pointer vers le haut:

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);//Réglez l'adaptateur
    }
}

Et configurons une vue de recyclage sur l'écran principal.

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>

Ensuite, décidons du nombre de parents et d'enfants à afficher. Cette fois, c'est une implémentation statique, mais si vous changez cela, je pense que ce sera dynamique. peut être,,, Tout d'abord, implémentez les groupes de données parent et enfant.

Parent.java


emballer mon mec;
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


emballer mon mec;

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];
        }
    };
}

Ensuite, créons une maison qui associe Parent.java à `` `` Child.java. (Il est impossible d'avoir une maison avec plusieurs parents et plusieurs enfants, mais cela ressemble à un établissement d'hébergement ??)

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;//Nombre de parents
    final private static int child_num = 5;//Nombre d'enfants

    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);
    }
}

Ici, nous combinons les données enfants et les données parent.

C'est tout pour le code. Nous recherchons des critiques et des critiques. : muscle_tone3:

Ce code

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

Recommended Posts

Pliage et dépliage du contenu de la vue Recycleur
Personnalisez la répartition du contenu de Recyclerview
[Rails] Vérifiez le contenu de l'objet
Remplacez le contenu du fichier Jar
Ceci et cela de JDK
[Ruby] Afficher le contenu des variables
[Rails] Lire le RSS du site et renvoyer le contenu au premier plan
Vérifiez le contenu du magasin de certificats Java
Vérifiez le contenu des paramètres avec le levier
Maintenant, j'ai résumé les bases de RecyclerView
À propos du fonctionnement de next () et nextLine ()
[Ruby] Coupez le contenu des publicités Twitter
Corriger la position d'arrêt de smoothScrollToPosition de RecyclerView
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Le contenu des données enregistrées par CarrierWave.
[Java] Contenu de l'interface de collection et de l'interface de liste
Vérifiez la version de JDK installée et la version de JDK activée
Sortie de la somme de chaque nom et de son contenu à partir du tableau multiple
JAVA: jar, aar, affichez le contenu du fichier
Pensez à la combinaison de Servlet et Ajax
Vérifiez le contenu de l'objet argument avec Mockito
Comparez la vitesse de l'instruction for et de l'instruction for étendue.
[Java] La partie déroutante de String et StringBuilder
Table des matières Refactoring de code et articles associés
J'ai comparé les caractéristiques de Java et .NET
Écraser le contenu de la configuration avec Spring-boot + JUnit5
Je veux var_dump le contenu de l'intention
Apprenez le mécanisme rudimentaire et l'utilisation de Gradle 4.4
À propos de next () et nextLine () de la classe Scanner
Quels sont les avantages de DI et de Thymeleaf?
[Android 9.0 Pie Java] Implémentez setOnTouchListener dans la marge de RecyclerView et fermez le clavier virtuel
ArrayList et le rôle de l'interface vu depuis List
Lister le contenu des catégories créées avec Active Hash
Veuillez noter la division (division) de java kotlin Int et Int
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
La comparaison d'énumération est ==, et equals est bonne [Java]
[Grails] À propos de la zone de paramétrage et des éléments de paramétrage de application.yml
Convertit le tableau d'erreurs.full_messages en caractères et sortie
Tester le contenu d'un fichier Excel avec JUnit
Organiser l'état actuel de Java et envisager l'avenir
Langage Java du point de vue de Kotlin et C #
Jusqu'à l'utilisation de Spring Data et JPA Part 2
Vérification de la relation entre l'image Docker et le conteneur
Jusqu'à l'utilisation de Spring Data et JPA Part 1
J'ai résumé les types et les bases des exceptions Java
[Note technique] À propos des avantages et des inconvénients de Ruby
[Rails] Comment obtenir le contenu des paramètres forts
Java: utilisez Stream pour trier le contenu d'une collection
[Ruby] Imbrication de classes, héritage et principes de base de soi
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
Le monde de Clara-Rules (5)
L'idée du tri rapide