[Android] [Java] Verwalten Sie den Status der CheckBox von ListView

Es war für ca. 2 Monate verpackt, also ein Memorandum

Ausführungsumgebung

IDE:Android Studio 3.4 Sprache: Java

Xperia XZ3 (wird für das eigentliche Debuggen von Maschinen verwendet) Betriebssystem ist Android 9 (API Level 28)

Was möchten Sie tun

Verhindern Sie, dass CheckBox in ListView seinen Prüfstatus durch Scrollen ändert.

Lösungen

Fügen Sie in der getView-Methode, die die in ListView angezeigten Elemente verarbeitet, den Listener von CheckBox von ListView erneut ein und verwenden Sie in der onCheckedChanged-Methode die Position des getView-Arguments, um das Element erneut abzurufen.

Obwohl es im folgenden Code nicht gezeigt wird ArrayAdapter erweitert, Ich verwende das ViewHolder-Muster.

Das Folgende ist ein erfolgreiches Beispiel.

ListAdapter.java


//ListItem ist eine selbst erstellte Klasse von Elementen, die in ListView angezeigt werden sollen.
private ListItem item;
//Ausgelassen ~~~~~~~~~~~~~
public View getView (final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        //Wenn in convertView nichts enthalten ist, erstellen Sie eine neue.
        convertView = mInflater.inflate(mResId, parent, false);

        //Holen Sie sich die Elemente jedes Elements in der Liste.
        holder = new ViewHolder();
        holder.isActive = convertView.findViewById(R.id.alarm_active);

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder)convertView.getTag();
    }

    //Ruft eine Instanz des Elements ab, die in der Listenansicht angezeigt werden soll.
    item = getItem(position);

    //Ziehen Sie den Hörer ab.
    holder.isActive.setOnCheckedChangeListener(null);

    //Gegenstand aus Position auf dem Element erhalten(Instanz der Homebrew-Klasse)Zum Element.
    holder.isActive.setChecked(item.isActive());

    //Fügen Sie den Listener ein.
    holder.isActive.setOnCheckedChangeListener(
        new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged (CompoundButton cb, boolean isChecked) {
                ListItem listItem = getItem(position);
                //Nullprüfung auf Warnung
                if (listItem != null){
                    listItem.setActive(isChecked);
                }
            }
        });

    return convertView;
}

Das Wichtigste dabei ist die Methode ** onCheckedChanged ** in der anonymen Klasse ListItem listItem = getItem(position); Es ist ein Prozess namens.

Dieser Prozess soll den Prüfstatus im Listenelement (selbst erstellte Klasse) widerspiegeln. Nur weil es bereits wie "item = getItem (position);" gemacht wurde, entfernen Sie diesen Teil und Wenn Sie so etwas wie "item.setActive (isChecked)" ausführen, funktioniert es nicht richtig.

Recommended Posts

[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Den aktuellen Status von Java organisieren und die Zukunft betrachten
<Android> Ändern Sie die Hintergrundfarbe der List-Zeile von ListView
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
[Java] Löschen Sie die Elemente von List
Über die Grundlagen der Android-Entwicklung
[Java Edition] Geschichte der Serialisierung
Der Ursprung von Java-Lambda-Ausdrücken
[Android] Dynamisch die Höhe von ListView mit Kopie einstellen (für Anfänger)
[Android] Implementierung von SideVolling ListView mit RecyclerView
Verstehen Sie die Grundlagen von Android Audio Record
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Vergleichen Sie Elemente eines Arrays (Java)
Was war keine faire Verwendung der Java-API-Umleitung unter Android?
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
Messen Sie einfach die Größe von Java-Objekten
Rückblick auf die Grundlagen von Java
Ausgabe des Buches "Einführung in Java"
Die Geschichte des Schreibens von Java in Emacs
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen
Die Geschichte des einfachen String-Vergleichs in Java
JAVA: jar, aar, zeige den Inhalt der Datei an
Die Geschichte eines gewöhnlichen Othello in Java
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
Ich habe die Eigenschaften von Java und .NET verglichen
Verwalten Sie die Version von Ruby selbst mit rbenv
[Java] Achten Sie auf den Schlüsseltyp der Karte
Spüren Sie den Lauf der Zeit auch in Java
Die Geschichte der Optimierung der Android-App mit libGDX
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Probieren Sie Progate Free Edition [Java II]
[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Das Datum und die Uhrzeit von java8 wurden aktualisiert
Geschichte der Testautomatisierung mit Appium [Android / Java]
Importieren Sie Dateien derselben Hierarchie in Java
Erster Touch der Files-Klasse (oder Java 8)
Java Willkommen im Sumpf der zweidimensionalen Arrays
Probieren Sie Progate Free Edition [Java I]
[Android 9.0 Pie Java] Implementieren Sie setOnTouchListener am Rand von RecyclerView und schließen Sie die Softtastatur
[Java] Übersicht über Java
[Java] So erhalten Sie die URL der Übergangsquelle
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
Wie schreibe ich Scala aus der Perspektive von Java
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int