[JAVA] Personnalisez la répartition du contenu de Recyclerview

introduction

Dans certains cas, la présentation du contenu de Recyclerview est divisée en deux, ci-dessous qui est divisé en quatre, non, il n'est pas nécessaire de diviser en dessous de ces quatre divisions! De cette façon, je veux diviser le contenu de la vue de recyclage de différentes manières!

device.gif

comme ça!

Les références

À propos de RecyclerView http://qiita.com/Yuki_Yamada/items/ec8b6c1ff0c9d74c2a53 À propos de setSpan (combien d'éléments sont divisés) https://stackoverflow.com/questions/32366412/gridlayoutmanager-setspansizelookup-creating-blank-cells À propos de Viewtype http://woshidan.hatenablog.com/entry/2015/11/02/083000

Paramètres de la bibliothèque

build.gradle


compile 'com.android.support:recyclerview-v7:25.3.1'

S'il-vous-plait ajoutez.

la mise en oeuvre

Cette fois, le contenu de xml décrit dans les trois fichiers de mise en page est appliqué à la vue de recyclage. Ensuite, le fichier de mise en page est décrit ci-dessous.

layout1.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:layout_margin="1dp"
        android:text="1"
        android:background="@color/colorAccent"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="50dp" />
</LinearLayout>

layout2.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:layout_margin="1dp"
        android:text="2"
        android:background="@color/colorPrimaryDark"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="100dp" />
</LinearLayout>

layout3.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:layout_margin="1dp"
        android:text="3"
        android:background="@color/colorPrimary"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="200dp" />
</LinearLayout>

Ensuite, définissons le Recyclerview comme d'habitude. Tout d'abord, préparez un Recyclerview (Recyclerview ne peut pas avoir d'éléments enfants)

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

Ensuite, connectez Recyclerview avec layout1.xml, layout2.xml et layout3.xml par adaptateur.

custom_recyclerview_adapter.java


emballer mon colis;

import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class custom_recyclerview_adapter extends RecyclerView.Adapter<custom_recyclerview_adapter.ViewHolder>{
    private Activity mactivity;
    private int item_count;

    public custom_recyclerview_adapter(Activity mactivity,int item_count) {
        this.mactivity = mactivity;
        this.item_count = item_count;
    }

    @Override
    public custom_recyclerview_adapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View view;
        final custom_recyclerview_adapter.ViewHolder viewHold;

        /******important******/
        switch(i) {//Ici, passez du viewType de la disposition à la disposition que vous souhaitez appliquer.
            case 0:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Équipé d'un écouteur de clic
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Obtenir la position
                        Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
                    }
                });
                return viewHold;
            case 1:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout2, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Équipé d'un écouteur de clic
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Obtenir la position
                        Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
                    }
                });
                return viewHold;
            case 2:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout3, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Équipé d'un écouteur de clic
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Obtenir la position
                        Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
                    }
                });
                return viewHold;
        }
        /*************/
        return null;
    }

    @Override//Apportez des modifications à la vue ici
    public void onBindViewHolder(custom_recyclerview_adapter.ViewHolder viewHolder, int i) {
        //Affichage des données
        if(0 <= i && i <= 3) {
            //viewHolder.title1.setText(test[i] + "M.");
        }
        else if(4 <= i && i <= 7){// creates second view
            //viewHolder.title2.setText("hello");
        }
        else{// creates third view
            //viewHolder.title3.setText("test");
        }
    }

    @Override
    public int getItemCount() {
        return item_count;
    }

    /******important*******/
    @Override
    public int getItemViewType(int position) {//position est la position de l'article dans la vue de recyclage
        if(0 <= position && position <= 3) {//Viewtype 0e au 3e contenu de recyclerview"0"Mis à
            return 0;
        }
        else if(4 <= position && position <= 7){//Viewtype le 4e au 7e contenu de recyclerview"1"Mis à
            return 1;
        }
        else{//Autres types de vues"2"Mis à
            return 2;
        }
    }
    /*****************/

    public class ViewHolder extends RecyclerView.ViewHolder{
        /*TextView title1;
        TextView title2;
        TextView title3;*/
        public ViewHolder(View view,int i) {
            super(view);
            /*title1 = (TextView)view.findViewById(R.id.textsample);
            title2 = (TextView)view.findViewById(R.id.textsample1);
            title3 = (TextView)view.findViewById(R.id.textsample2);*/
        }
    }
}

Vous pouvez définir «ViewType» pour chaque «position» avec «getItemViewType». Vous pouvez considérer «ViewType» comme un indicateur.

Les acteurs sont maintenant terminés. Mettons en œuvre! !!

MainActivity.java


package jp.app.oomae.hisaki.recyclerview_custom_layout_sample;

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

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.setHasFixedSize(true);//Les performances de traitement s'améliorent lorsque la taille de la vue est fixe
        /*****************************************important*****************************************************/
        GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL,false);
        gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
        recyclerView.setLayoutManager(gridLayoutManagerVertical);
        /*************************************************************************************************/
        custom_recyclerview_adapter adapter = new custom_recyclerview_adapter(this,20);//Faire 20 articles
        recyclerView.setAdapter(adapter);
    }
}

Cependant, si rien n'est fait, une erreur se produira. La portée à l'intérieur de Recyclerview n'est pas définie. Décrivez le fichier suivant.

Custom_Spansize.java


emballer mon colis;

import android.support.v7.widget.GridLayoutManager;

public class Custom_Spansize extends GridLayoutManager.SpanSizeLookup{
    private int spanCnt1, spanCnt2 , spanCnt3;

    public Custom_Spansize(int spanCnt1, int spanCnt2,int spanCnt3) {
        super();
        this.spanCnt1 = spanCnt1;
        this.spanCnt2 = spanCnt2;
        this.spanCnt3 = spanCnt3;
    }

    @Override
    public int getSpanSize(int position) {
        int result;
        if(position >= 0 && position <= 3){
            result = spanCnt1;
        }
        else if(position >= 4 && position <= 7){
            result = spanCnt2;
        }
        else {
            result = spanCnt3;
        }
        return result;
    }
}

Ceci termine la mise en œuvre.

application

MainActivity.java


        GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL,false);
        gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));

Modifiez maintenant l'intervalle de temps.

         GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4,LinearLayoutManager.VERTICAL,false);

«4» est le plus grand nombre de portées.

         gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));

Modifiez l'intervalle avec l'argument ici. L'idée est

Deuxième argument de GridLayoutManager ÷ Custom_Spansize chaque argument = span Le résultat de la division est Span.

C'est la fin. Nous avons hâte d'avoir de tes nouvelles.

Ce code

https://github.com/hisakioomae/recyclerview_custom_layout_sample

Recommended Posts

Personnalisez la répartition du contenu de Recyclerview
[Rails] Comment obtenir le contenu des paramètres forts
[Ruby] Comment récupérer le contenu du double hachage
Comment modifier le contenu du fichier jar sans décompresser
Pliage et dépliage du contenu de la vue Recycleur
Comment déterminer le nombre de parallèles
Comment trier une liste de SelectItems
Comment obtenir le contenu de la carte à l'aide du mémorandum d'instructions
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Comment trouver la cause de l'erreur Ruby
Je veux var_dump le contenu de l'intention
Comment obtenir le jour d'aujourd'hui
Sortie de la façon d'utiliser la méthode slice
Comment afficher le résultat du remplissage du formulaire
Comment supprimer / mettre à jour le champ de liste de OneToMany
Jusqu'où est la bonne réponse pour diviser le processus?
Comment écrire Scala du point de vue de Java
[Java] Comment obtenir la valeur maximale de HashMap
[Rails] Comment changer le nom de colonne de la table
[Android] Comment obtenir la langue de réglage du terminal
Comment juger le clic de n'importe quelle zone de l'image
Java: utilisez Stream pour trier le contenu d'une collection
Comment télécharger une ancienne version d'Apache Tomcat
[Swift] Comment obtenir l'ID de document Firebase
[Docker] Comment voir le contenu des volumes. Démarrez un conteneur avec les privilèges root.
Comment afficher le champ de sélection de time_select toutes les 30 minutes
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
Comment modifier la valeur de réglage de Springboot Hikari CP
Comment ajouter des éléments sans spécifier la longueur du tableau
Comment résoudre les problèmes causés par les trois files d'attente de blocage de Java
[Rails] Comment afficher une liste de messages par catégorie
Comment se moquer de certaines méthodes de la classe testée
Comment dériver le dernier jour du mois en Java
Comment vérifier l'extension et la taille des fichiers téléchargés
[jsoup] Comment obtenir la totalité de la documentation
Comment utiliser la méthode form_with
[Rails] Vérifiez le contenu de l'objet
Remplacez le contenu du fichier Jar
Comment trouver l'angle moyen
Comment utiliser la classe wrapper
Comment utiliser setDefaultCloseOperation () de JFrame
Comment ajouter la fonction de suppression
[Ruby] Afficher le contenu des variables
[Swift] Comment modifier dynamiquement la hauteur de la barre d'outils sur le clavier
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment définir l'adresse IP et le nom d'hôte de CentOS8
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
[Rails] Comment omettre l'affichage de la chaîne de caractères de la méthode link_to
[Rails] Comment changer le titre de la page du navigateur pour chaque page