[Android] [Java] Gérer l'état de CheckBox de ListView

Il a été emballé pendant environ 2 mois, donc un mémorandum

Environnement d'exécution

IDE:Android Studio 3.4 Langue: Java

Xperia XZ3 (utilisé pour le débogage réel de la machine) Le système d'exploitation est Android 9 (niveau d'API 28)

Qu'est-ce que tu veux faire

Empêchez CheckBox dans ListView de changer son état de vérification en faisant défiler.

Solution

Dans la méthode getView, qui traite les éléments affichés dans ListView, collez à nouveau l'écouteur de CheckBox de ListView et dans la méthode onCheckedChanged, utilisez la position de l'argument getView pour récupérer à nouveau l'élément.

Bien que cela ne soit pas indiqué dans le code ci-dessous ArrayAdapter <type de classe à afficher dans ListView> s'étend, J'utilise le modèle ViewHolder.

Voici un exemple réussi.

ListAdapter.java


//ListItem est une classe d'éléments créés par l'utilisateur à afficher dans ListView.
private ListItem item;
//Omis ~~~~~~~~~~~~
public View getView (final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        //S'il n'y a rien dans convertView, créez-en un nouveau.
        convertView = mInflater.inflate(mResId, parent, false);

        //Obtenez les éléments de chaque élément de la liste.
        holder = new ViewHolder();
        holder.isActive = convertView.findViewById(R.id.alarm_active);

        convertView.setTag(holder);

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

    //Obtient une instance de l'élément à afficher dans la vue de liste.
    item = getItem(position);

    //Décollez l'auditeur.
    holder.isActive.setOnCheckedChangeListener(null);

    //Objet obtenu à partir de la position sur l'élément(Instance de classe homebrew)À l'élément.
    holder.isActive.setChecked(item.isActive());

    //Collez l'auditeur.
    holder.isActive.setOnCheckedChangeListener(
        new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged (CompoundButton cb, boolean isChecked) {
                ListItem listItem = getItem(position);
                //Null check for warning
                if (listItem != null){
                    listItem.setActive(isChecked);
                }
            }
        });

    return convertView;
}

L'important ici est dans la méthode ** onCheckedChanged ** dans la classe anonyme ListItem listItem = getItem(position); C'est un processus appelé.

Ce processus doit refléter le statut de la vérification dans l'élément de liste (classe auto-fabriquée), Supprimez cette partie simplement parce que c'est déjà fait comme ʻitem = getItem (position); Si vous faites quelque chose comme ʻitem.setActive (isChecked);, cela ne fonctionnera pas correctement.

Recommended Posts

[Android] [Java] Gérer l'état de CheckBox de ListView
Organiser l'état actuel de Java et envisager l'avenir
<Android> Changer la couleur d'arrière-plan de la ligne Liste de ListView
Surveillez l'état interne des programmes Java avec Kubernetes
[Java] Supprimer les éléments de la liste
À propos des bases du développement Android
[Édition Java] Histoire de la sérialisation
L'origine des expressions Java lambda
[Android] Définir dynamiquement la hauteur de ListView avec copie (pour les débutants)
[Android] Implémentation de ListView à défilement latéral à l'aide de RecyclerView
Comprendre les bases de l'enregistrement audio Android
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
Comparer les éléments d'un tableau (Java)
Qu'est-ce qui n'était pas une utilisation équitable du détournement d'API Java sur Android?
[jour: 5] J'ai résumé les bases de Java
Quelles sont les fonctionnalités mises à jour de Java 13
Mesurez facilement la taille des objets Java
Retour sur les bases de Java
Sortie du livre "Introduction à Java"
L'histoire de l'écriture de Java dans Emacs
[Java] Vérifiez le nombre d'occurrences de caractères
[Java] [Spring] Tester le comportement de l'enregistreur
Résumer le cycle de vie des objets Java à prendre en compte dans le développement Android
L'histoire de la comparaison de chaînes de bas niveau en Java
JAVA: jar, aar, affichez le contenu du fichier
L'histoire de la fabrication d'un Othello ordinaire à Java
A propos de l'ordre de description des propriétés système Java
À propos de l'idée des classes anonymes en Java
L'ordre des modificateurs de méthode Java est fixe
[Java] Accéder à l'URL signée de s3 (version signée 2)
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
[Java] La partie déroutante de String et StringBuilder
[Note] Java: mesure la vitesse de concaténation de chaînes
J'ai comparé les caractéristiques de Java et .NET
Gérez la version de Ruby elle-même avec rbenv
[Java] Faites attention au type de clé de la carte
Ressentez le passage du temps même à Java
L'histoire du réglage de l'application Android avec libGDX
Calculer le score de similarité des chaînes de caractères avec JAVA
Essayez Progate Free Edition [Java II]
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
La date et l'heure de java8 ont été mises à jour
Histoire de l'automatisation des tests avec Appium [Android / java]
Importer des fichiers de la même hiérarchie en Java
Première touche de la classe Files (ou Java 8)
Java Bienvenue dans le marais des tableaux bidimensionnels
Essayez Progate Free Edition [Java I]
[Android 9.0 Pie Java] Implémentez setOnTouchListener dans la marge de RecyclerView et fermez le clavier virtuel
[Java] Présentation de Java
[Java] Comment obtenir l'URL de la source de transition
Obtenez l'URL de la destination de la redirection HTTP en Java
CI l'architecture des applications Java / Kotlin avec ArchUnit
Comment écrire Scala du point de vue de Java
Veuillez noter la division (division) de java kotlin Int et Int