Il a été emballé pendant environ 2 mois, donc un mémorandum
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)
Empêchez CheckBox dans ListView de changer son état de vérification en faisant défiler.
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