[JAVA] Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird

Einführung

In einigen Fällen ist das Layout des Inhalts des Recyclerview zweigeteilt, darunter weiter in vier, und nein, es besteht keine Notwendigkeit, unter diesen vier Unterteilungen zu teilen! Auf diese Weise möchte ich den Inhalt der Recyclingansicht auf verschiedene Arten aufteilen!

device.gif

so was!

Verweise

Informationen zu RecyclerView http://qiita.com/Yuki_Yamada/items/ec8b6c1ff0c9d74c2a53 Über setSpan (wie viele Elemente sind geteilt) https://stackoverflow.com/questions/32366412/gridlayoutmanager-setspansizelookup-creating-blank-cells Über Viewtype http://woshidan.hatenablog.com/entry/2015/11/02/083000

Bibliothekseinstellungen

build.gradle


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

Bitte hinzufügen.

Implementierung

Dieses Mal wird der in den drei Layoutdateien beschriebene XML-Inhalt auf die Recycling-Ansicht angewendet. Anschließend wird die Layoutdatei unten beschrieben.

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>

Als nächstes stellen wir die Recyclerview wie gewohnt ein. Bereiten Sie zunächst eine Recyclerview vor (Recyclerview kann keine untergeordneten Elemente enthalten).

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>

Verbinden Sie anschließend Recyclerview per Adapter mit "layout1.xml", "layout2.xml" und "layout3.xml".

custom_recyclerview_adapter.java


Paket mein Paket;

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;

        /******wichtig******/
        switch(i) {//Verzweigen Sie hier vom viewType des Layouts zum Layout, das Sie anwenden möchten.
            case 0:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Ausgestattet mit Click Listener
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Position bekommen
                        Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
                    }
                });
                return viewHold;
            case 1:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout2, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Ausgestattet mit Click Listener
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Position bekommen
                        Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
                    }
                });
                return viewHold;
            case 2:
                view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout3, viewGroup, false);
                viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
                //Ausgestattet mit Click Listener
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = viewHold.getAdapterPosition(); //Position bekommen
                        Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
                    }
                });
                return viewHold;
        }
        /*************/
        return null;
    }

    @Override//Nehmen Sie hier Änderungen an der Ansicht vor
    public void onBindViewHolder(custom_recyclerview_adapter.ViewHolder viewHolder, int i) {
        //Datenanzeige
        if(0 <= i && i <= 3) {
            //viewHolder.title1.setText(test[i] + "Herr.");
        }
        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;
    }

    /******wichtig*******/
    @Override
    public int getItemViewType(int position) {//Position ist die Position des Elements in der Recyclingansicht
        if(0 <= position && position <= 3) {//Ansichtstyp 0 bis 3 Inhalt von recyclerview"0"Einstellen
            return 0;
        }
        else if(4 <= position && position <= 7){//Geben Sie den 4. bis 7. Inhalt von recyclerview ein"1"Einstellen
            return 1;
        }
        else{//Andere Ansichtstypen"2"Einstellen
            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);*/
        }
    }
}

Sie können "ViewType" für jede "Position" mit "getItemViewType" festlegen. Sie können sich ViewType als Flag vorstellen.

Die Schauspieler sind jetzt fertig. Lassen Sie uns implementieren! !!

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);//Die Verarbeitungsleistung verbessert sich, wenn die Ansichtsgröße festgelegt ist
        /*****************************************wichtig*****************************************************/
        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);//Mache 20 Gegenstände
        recyclerView.setAdapter(adapter);
    }
}

Wenn jedoch nichts unternommen wird, tritt ein Fehler auf. Die Spanne im Recyclerview ist nicht festgelegt. Beschreiben Sie die folgende Datei.

Custom_Spansize.java


Paket mein Paket;

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

Damit ist die Implementierung abgeschlossen.

Anwendung

MainActivity.java


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

Ändern Sie nun das Bereichsintervall.

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

4 ist hier die höchste Anzahl von Spannen.

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

Ändern Sie hier das Intervall mit dem Argument. Die Idee ist

Das zweite Argument von GridLayoutManager ÷ Custom_Spansize jedes Argument = span Das Ergebnis der Teilung ist Span.

Das ist das Ende. Wir freuen uns von Ihnen zu hören.

Dieser Code

https://github.com/hisakioomae/recyclerview_custom_layout_sample

Recommended Posts

Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
[Rails] So erhalten Sie den Inhalt starker Parameter
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
So ändern Sie den Inhalt der JAR-Datei, ohne sie zu dekomprimieren
Ein- und Ausklappen des Inhalts der Recycler-Ansicht
So bestimmen Sie die Anzahl der Parallelen
So sortieren Sie eine Liste von SelectItems
So erhalten Sie den Inhalt von Map mithilfe des for-Anweisungsmemorandums
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
So finden Sie die Ursache des Ruby-Fehlers
Ich möchte den Inhalt der Absicht var_dump
Wie komme ich zum heutigen Tag?
Ausgabe der Verwendung der Slice-Methode
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
So löschen / aktualisieren Sie das Listenfeld von OneToMany
Wie weit ist die richtige Antwort, um den Prozess zu teilen?
Wie schreibe ich Scala aus der Perspektive von Java
[Java] So erhalten Sie den Maximalwert von HashMap
[Rails] So ändern Sie den Spaltennamen der Tabelle
[Android] So erhalten Sie die Einstellungssprache des Terminals
So beurteilen Sie den Klick eines beliebigen Bildbereichs
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
So laden Sie eine ältere Version von Apache Tomcat herunter
[Swift] So erhalten Sie die Firebase-Dokument-ID
[Docker] So sehen Sie den Inhalt von Volumes. Starten Sie einen Container mit Root-Rechten.
So zeigen Sie das Auswahlfeld von time_select alle 30 Minuten an
So erhalten Sie die längsten Informationen von Twitter ab dem 12.12.2016
So ändern Sie den Einstellwert von Springboot Hikari CP
Hinzufügen von Elementen ohne Angabe der Länge des Arrays
So lösen Sie die Probleme, die durch die drei Blockierungswarteschlangen von Java verursacht werden
[Rails] So zeigen Sie eine Liste der Beiträge nach Kategorie an
Wie man einige Methoden der zu testenden Klasse verspottet
So leiten Sie den letzten Tag des Monats in Java ab
So überprüfen Sie die Erweiterung und Größe der hochgeladenen Dateien
[jsoup] So erhalten Sie die gesamte Dokumentation
Verwendung der Methode form_with
[Schienen] Überprüfen Sie den Inhalt des Objekts
Ersetzen Sie den Inhalt der Jar-Datei
So finden Sie den durchschnittlichen Winkel
Verwendung der Wrapper-Klasse
Verwendung von setDefaultCloseOperation () von JFrame
So fügen Sie die Löschfunktion hinzu
[Ruby] Zeigt den Inhalt von Variablen an
[Swift] So ändern Sie dynamisch die Höhe der Symbolleiste auf der Tastatur
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
So legen Sie die IP-Adresse und den Hostnamen von CentOS8 fest
So zeigen Sie 0 auf der linken Seite des Standardeingabewerts an
[Rails / Heroku / MySQL] So setzen Sie die Datenbank der Rails-App auf Heroku zurück
[Rails] So lassen Sie die Anzeige der Zeichenfolge der link_to-Methode weg
[Schienen] So ändern Sie den Seitentitel des Browsers für jede Seite