[JAVA] Remarques sur expand () et collapse () de Expandablerecyclerview

introduction

Je veux répéter "plus" ⇔ "fermer" dans la vue parent de Expandablerecyclerview. Comme ça.

device.gif

supposition

Tout d'abord, implémentez chaque fichier en vous référant à cela. http://qiita.com/iKASiH/items/6707f9062e2e4bc48696

la mise en oeuvre

Fichiers requis

Caractéristiques supplémentaires

Mettons-le en œuvre.

Fichier de mise en page

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:id="@+id/recyclerview"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

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:gravity="center"
        android:id="@+id/parenttext"
        android:text="ouvert"
        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:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />
</LinearLayout>

Fichier de fonction

Parent_ViewHolder


package jp.app.oomae.hisaki.expandable_recyclerview;

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 open(){
        text1.setText("Fermer");
    }
    public void close(){
        text1.setText("ouvert");
    }

    @Override//Appelé quand il se propage
    public void expand() {
        open();
    }
    @Override//Appelé quand rétréci
    public void collapse() {
        close();
    }
}

Faisons le! !!

device.gif

Il est "fermé" même s'il n'est pas ouvert ... Même s'il est ouvert, il est "ouvert" ...: fatigue_face:

Solution

La solution consiste à déterminer s'il est ouvert pour chaque défilement et à refléter le texte.

Home_Adapter.java


package jp.app.oomae.hisaki.expandable_recyclerview;

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) {
        /*--------------Ajouter ici---------------*/
        if(isGroupExpanded(flatPosition)){
            holder.open();
        }
        else{
            holder.close();
        }
        /*---------------------------------------*/
    }

    @Override
    public void onBindChildViewHolder(Child_ViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
    }
}

Il existe une méthode isGroupExpanded dans cette bibliothèque, qui détermine si elle est ouverte ou non. Si flatposition est utilisé comme argument, true ou false sera renvoyé en fonction de l'état de la vue parent. Utilisez-le pour refléter le texte. C'est tout ce qu'on peut en dire. J'étais assez impatient. : froncer les sourcils2:

Veuillez laisser un commentaire.

Github : https://github.com/hisakioomae/Expandable_Recyclerview_sample

Recommended Posts

Remarques sur expand () et collapse () de Expandablerecyclerview
Remarques sur le chemin et le package Java
Lancement de l'application No Todo au lieu de Todo. .. (Et notes faîtières)
Remarques sur l'API Stream et SQL de Java
Ruby on Rails ~ Principes de base de MVC et du routeur ~
Télécharger et télécharger des notes en java sur S3
Remarques sur les tampons de protocole
mémo python sur docker
[Android] Notes sur xml
Notes sur les expressions régulières