[JAVA] RecyclerView-Grundlagen

Überprüfungsumgebung

Der Inhalt dieses Artikels wurde in der folgenden Umgebung überprüft.

Informationen zu RecyclerView

Charakteristisch

Gesamtbild

Liste der Klassen, die in RecyclerView angezeigt werden

Name der Klasse Erläuterung Wo ist es in ListView?
RecyclerView RecyclerView selbst. Widget. Entspricht ListView selbst
RecyclerView.Adapter Wird generiert, indem eine Datenzeile in einer Ansichtszeile festgelegt wird Entspricht dem ListView-Adapter
RecyclerView.ViewHolder Enthält eine Referenzlinie für die Ansichtszeile (Widget) In ListView wurde das Layout mit der Methode getItem aufgeblasen. In RecyclerView befindet sich die Ansicht des Layouts für eine Zeile in der Unterklasse von ViewHolder.
RecyclerView.LayoutManager Eine Klasse, die das Layout unter Berücksichtigung der Größe eines Datenelements usw. reaktionsschnell verwaltet. Existiert nicht in ListView.

RecyclerView in der Abbildung

Die einfachste Übersicht über RecyclerView finden Sie unten. Der große Unterschied zu ListView besteht darin, dass in ListView das Aufblasen und Abrufen von Daten aus der Layoutdatei in der getItem-Methode Es wird in der Ansicht gespeichert. In RecyclerView muss jeder als unabhängiger Prozess (Methode oder Klasse) definiert werden.

RecyclerView_001.png

Die App wurde diesmal erstellt

Ich habe eine sehr einfache App erstellt. Inhalt, der nur das Bild und den Titel in einer Zeile anzeigt, sowie detaillierte Informationen darunter. Der Zweck dieser Zeit ist keine komplizierte Anzeige, aber um die grundlegende Implementierungsmethode von RecyclerView zu verstehen, habe ich sie zu einer so einfachen Anwendung gemacht.

SmallScreenshot_1493098981.png

Implementierung

Sie können die Vervollständigung der Eingabe optimal nutzen, indem Sie untergeordnete Elemente in der folgenden Reihenfolge erstellen.

Support-Bibliothek hinzufügen

Um RecyclerView verwenden zu können, müssen Sie eine Support-Bibliothek hinzufügen.

build.gradle


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

Layout für eine Zeile

row.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">


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="0.5"/>
            <TextView
                android:id="@+id/detail"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="0.5"/>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

Datenmodell für eine Zeile

RowData.java


package jp.co.casareal.sample.recyclerviewsample.model;

/**
 * Created by naoi on 2017/04/25.
 */

public class RowData {
    private String title;
    private String detail;
・ ・ ・ Setter/Getter weggelassen ...
}

ViewHolder-Definition

Der Adapter erhält eine Ansichtsreferenz aus dem aufgeblasenen Zeilenlayout und hält sie im Feld public </ b>.

CasarealViewHolder.java


package jp.co.casareal.sample.recyclerviewsample.viewholder;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

import jp.co.casareal.sample.recyclerviewsample.R;

/**
 * Created by naoi on 2017/04/25.
 */

public class CasarealViewHolder extends RecyclerView.ViewHolder {
    public TextView titleView;
    public TextView detailView;
    public CasarealViewHolder(View itemView) {
        super(itemView);
        titleView = (TextView) itemView.findViewById(R.id.title);
        detailView = (TextView) itemView.findViewById(R.id.detail);

    }
}

Adapterdefinition

CasarealRecycleViewAdapter.java


package jp.co.casareal.sample.recyclerviewsample.adapter;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

import jp.co.casareal.sample.recyclerviewsample.R;
import jp.co.casareal.sample.recyclerviewsample.model.RowData;
import jp.co.casareal.sample.recyclerviewsample.viewholder.CasarealViewHolder;

/**
 * Created by naoi on 2017/04/25.
 */

public class CasarealRecycleViewAdapter extends RecyclerView.Adapter<CasarealViewHolder> {

    private List<RowData> list;

    public CasarealRecycleViewAdapter(List<RowData> list) {
        this.list = list;
    }

    @Override
    public CasarealViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent,false);
        CasarealViewHolder vh = new CasarealViewHolder(inflate);
        return vh;
    }

    @Override
    public void onBindViewHolder(CasarealViewHolder holder, int position) {
        holder.titleView.setText(list.get(position).getTitle());
        holder.detailView.setText(list.get(position).getDetail());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

Beschreibung jedes Prozesses im Adapter

.java


 @Override
    public CasarealViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent,false);
        CasarealViewHolder vh = new CasarealViewHolder(inflate);
        return vh;
    }

Entspricht ① und ② von "RecyclerView in der Abbildung".

.java


@Override
    public void onBindViewHolder(CasarealViewHolder holder, int position) {
        holder.titleView.setText(list.get(position).getTitle());
        holder.detailView.setText(list.get(position).getDetail());
    }

Entspricht ③ und ④ von "RecyclerView in der Abbildung".

.java


    @Override
    public int getItemCount() {
        return list.size();
    }

Diese Methode sollte die Gesamtzahl der anzuzeigenden Elemente zurückgeben.

Außerdem wird der vom Konstruktor usw. anzuzeigende Datensatz übergeben.

Aktivitätsdefinition

Gesamtlayoutdatei

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="jp.co.casareal.sample.recyclerviewsample.MainActivity">

<android.support.v7.widget.RecyclerView
    android:id="@+id/casarealRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>

Wie bei ListView müssen Sie den Adapter später festlegen, sodass Sie die ID in RecyclerView angeben müssen.

Aktivitätsverarbeitung

MainActivity.java


package jp.co.casareal.sample.recyclerviewsample;

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

import java.util.ArrayList;
import java.util.List;

import jp.co.casareal.sample.recyclerviewsample.adapter.CasarealRecycleViewAdapter;
import jp.co.casareal.sample.recyclerviewsample.model.RowData;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView rv = (RecyclerView) findViewById(R.id.casarealRecyclerView);
        CasarealRecycleViewAdapter adapter = new CasarealRecycleViewAdapter(this.createDataset());

        LinearLayoutManager llm = new LinearLayoutManager(this);

        rv.setHasFixedSize(true);

        rv.setLayoutManager(llm);

        rv.setAdapter(adapter);
    }

    private List<RowData> createDataset() {

        List<RowData> dataset = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            RowData data = new RowData();
            data.setTitle("Casa Real Taro" + i + "Problem");
            data.setDetail("Casa Real Taro" + i + "Ich mag gebratene Stücke");

            dataset.add(data);
        }
        return dataset;
    }
}

Beschreibung jedes Prozesses

.java


 LinearLayoutManager llm = new LinearLayoutManager(this);
 rv.setLayoutManager(llm);

Eine der nützlichen Funktionen, die in ListView nicht enthalten sind, ist der LayoutManager, mit dem Daten reaktionsschnell angezeigt werden. Dieses Mal verwende ich LinerLayout, aber es gibt auch Grid und so weiter.

.java


 rv.setHasFixedSize(true);

Wenn die Anzahl der anzuzeigenden Daten eine feste Länge hat, ist dies eine Einstellung, die Ressourcen effektiv nutzt und die Leistung verbessert.

.java


  CasarealRecycleViewAdapter adapter = new CasarealRecycleViewAdapter(this.createDataset());
  rv.setAdapter(adapter);

Stellen Sie den Adapter ein.

.java


  private List<RowData> createDataset() {

        List<RowData> dataset = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            RowData data = new RowData();
            data.setTitle("Casa Real Taro" + i + "Problem");
            data.setDetail("Casa Real Taro" + i + "Ich mag gebratene Stücke");

            dataset.add(data);
        }
        return dataset;
    }

Der anzuzeigende Datensatz wird von der Methode createDataset generiert.

Um die Funktionen zu verbessern

Dies ist die Kotlin-Version. Wenn Sie jedoch wissen möchten, wie Sie per Drag & Drop oder Wischen arbeiten, lesen Sie bitte den folgenden Artikel.

Ziehen und Ablegen per Drag & Drop in RecyclerView

Referenz

Listen und Karten erstellen https://developer.android.com/training/material/lists-cards.html?hl=ja#CardView

API https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

Recommended Posts

RecyclerView-Grundlagen
Rails Grundlagen
Ruby-Grundlagen
Fragmentgrundlagen
JPA-Grundlagen 1
Docker-Grundlagen
ViewPager-Grundlagen
Java-Grundlagen
Java-Grundlagen
JPA-Grundlagen 2
Jetzt habe ich die Grundlagen von RecyclerView zusammengefasst
Schienen CSV Basic
Grundlagen des Rails-Routings
Grundlagen der Rails-Datenbank
Grundlagen von Ruby
Java JAR-Grundlagen
Objektorientierte (Java) Grundlagen
vim (gitbush) Grundlagen
Grundlagen regulärer Ausdrücke
Grundlagen der Java-Parallelverarbeitung
Grundlagen der Stream-API