[JAVA] Wir stellen vor, was ich gemacht habe, als ich RecyclerView eine Kopf- und Fußzeile hinzufügen wollte

Hallo. Ich schreibe so etwas zum ersten Mal, also weiß ich nicht, was ich tun soll, aber danke.

Zusammenfassung

Ich habe ListView in einer Android-App verwendet ↓ Ich möchte das Koordinatorlayout verwenden ↓ Verwenden wir RecyclerView ↓ Ich kann die Kopf- und Fußzeile nicht anhängen ↓ Ich habe einen Adapter erstellt, damit ich eine Kopf- und eine Fußzeile anbringen kann ↑ Ich werde den Adapter vorstellen, den ich zu diesem Zeitpunkt gemacht habe. (Ich habe es auf GitHub gestellt.) Ich hoffe es hilft jemandem. (Ich frage mich, ob es bereits existiert) Es tut mir leid, wenn etwas nicht stimmt. : bow_tone1:

Verwendung des von Ihnen erstellten Adapters

//Stellen Sie den Adapter her, den Sie verwenden möchten
MyAdapter adapter = new MyAdapter();

//Machen Sie PaneRecyclerViewAdapter
PaneRecyclerViewAdapter paneRecyclerViewAdapter = new PaneRecyclerViewAdapter(adapter); //Ich gebe dir einen Adapter

//Wenn es GridView ist, gebe ich Ihnen LayoutManager
//paneRecyclerViewAdapter.setGridLayoutManager(gridLayoutManager);

//Geben Sie einen Blick auf die Kopf- und Fußzeile
paneRecyclerViewAdapter.setHeaderView(headerView);
paneRecyclerViewAdapter.setFooterView(footerView);

//Fügen Sie PaneRecyclerVieAdapter zu RecyclerView hinzu
recyclerView.setAdapter(paneRecyclerViewAdapter);

Erklären Sie leicht die Bewegung

Holen Sie sich den Hauptadapter in den Konstruktor. Lassen Sie diesen Kerl im Grunde genommen seitwärts gehen.

public PaneRecyclerViewAdapter(RecyclerView.Adapter adapter) {
    mAdapter = adapter;
}

Sortieren Sie die Typen entsprechend.

@Override
public int getItemViewType(int position) {
    if(isHeader(position)) {
        return ITEM_VIEW_TYPE_HEADER;
    }
    if(isFooter(position)) {
        return ITEM_VIEW_TYPE_FOOTER;
    }

    return ITEM_VIEW_TYPE_ITEM;
}

private boolean isHeader(int position) {
    return mHeaderView != null && position == 0;
}

private boolean isFooter(int position) {
    int extraCount = mHeaderView != null ? 1 : 0;
    return mFooterView != null && position == mAdapter.getItemCount() + extraCount;
}

Die Anzahl der Elemente wird durch Hinzufügen der Anzahl der Kopf- und Fußzeilen zurückgegeben.

@Override
public int getItemCount() {
    int extraCount = 0;
    if(mHeaderView != null) extraCount += 1;
    if(mFooterView != null) extraCount += 1;
    return mAdapter.getItemCount() + extraCount;
}

ViewHolder, ein gewöhnlicher Artikel, wird von dem Adapter erstellt, den Sie erhalten haben.

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType == ITEM_VIEW_TYPE_HEADER) {
        return new ViewHolder(mHeaderView);
    }

    if(viewType == ITEM_VIEW_TYPE_FOOTER) {
        return new ViewHolder(mFooterView);
    }

    RecyclerView.ViewHolder viewHolder = mAdapter.onCreateViewHolder(parent, viewType);
    return new ViewHolder(viewHolder);
}

Übrigens sieht der Ansichtshalter von Pane Recycler wie folgt aus. Gewöhnliche Gegenstände werden im ViewHolder-Rohtyp aufbewahrt und bei Bedarf übergeben. Kopf- und Fußzeile sind bereits Ansicht, es handelt sich also um einen Seitwärtsfluss.

static class ViewHolder extends RecyclerView.ViewHolder {
    private RecyclerView.ViewHolder mItemViewHolder;

    ViewHolder(View itemView) {
        super(itemView);
    }

    ViewHolder(RecyclerView.ViewHolder viewHolder) {
        super(viewHolder.itemView);
        mItemViewHolder = viewHolder;
    }

    RecyclerView.ViewHolder getItemViewHolder() {
        return mItemViewHolder;
    }
}

OnBind bleibt auch dem Adapter überlassen, der die normalen Artikel erhalten hat. HeaderFooter hat nichts zu tun, daher sollten Sie nichts tun müssen

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if(isHeader(position)) return;
    if(isFooter(position)) return;
    int extraCount = mHeaderView != null ? 1 : 0;
    mAdapter.onBindViewHolder(holder.getItemViewHolder(), position - extraCount);
}

Zum Zeitpunkt von GridLayout möchte ich, dass HeaderFooter seitlich voll ist, also SpanSizeLookup? Es scheint mit gesetzt zu sein. Linear ist voller Menschen, Sie müssen also nichts tun. Ich versuche, die Einrichtung zu vereinfachen, aber wenn Sie es draußen einrichten möchten, ist dies in Ordnung. (Wenn Sie getSpanSize verwenden, das unten vorbereitet ist, sollten Sie dies im Freien tun können.)

public void setGridLayoutManager(GridLayoutManager gridLayoutManager) {
    mSpanCount = gridLayoutManager.getSpanCount();
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return PaneRecyclerViewAdapter.this.getSpanSize(position);
        }
    });
}
public int getSpanSize(int position) {
    if(isHeader(position) || isFooter(position)) {
        return mSpanCount;
    }
    return 1;
}

Ende

Du hättest nichts Schwieriges tun sollen. Zu dieser Zeit habe ich es jedoch geschafft, während ich Hallo sagte. Bitte lassen Sie mich wissen, wenn Sie welche haben. Entschuldigung. : walk_tone1:

Github https://github.com/syuki/PaneRecyclerViewAdapter

Recommended Posts

Wir stellen vor, was ich gemacht habe, als ich RecyclerView eine Kopf- und Fußzeile hinzufügen wollte
Ich wollte eine Zeile animieren, wenn ich Realm und RecyclerView unter Android verwende, aber ich habe aufgegeben
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
Ich habe einen Arbitrage-Transaktionsbot für virtuelle Währungen erstellt und versucht, Geld zu verdienen
Ich wollte der Methode @VisibleForTesting hinzufügen
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
Eine Geschichte, als ich versuchte, ein Video zu erstellen, indem ich Processing und Resolume verknüpfte
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich habe einen Docker-Container erstellt, um Maven auszuführen
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Ich möchte eine Verbindung herstellen, wenn eine Datenbank mit Spring und MyBatis erstellt wird
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
So erstellen Sie eine Kopf- oder Fußzeile einmal und verwenden sie auf einer anderen Seite
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe eine Methode entwickelt, um nach Premium Friday zu fragen
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich habe im Frühjahr einen Restful-Server und -Client erstellt.
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich habe dem Erstellungspfad in einem Eclipse-Projekt eine Jar-Datei hinzugefügt, aber die Situation und was zu tun ist, wenn "java.util.zip.ZipException: ungültiger LOC-Header (falsche Signatur)" angezeigt wird
[Rails 6] Was tun, wenn nach der Einführung von haml ein fehlender Vorlagenfehler auftritt? [Super easy]
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Ich habe ein Plug-In erstellt, das Jextract mit Gradle-Aufgaben ausführt
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Fügen Sie dem Swift-Button (und auch dem Kreis) einen Schatten hinzu.
Ich habe eine Docker-Datei erstellt, um Glassfish 5 mit Oracle Java zu starten