Es war für ca. 2 Monate verpackt, also ein Memorandum
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)
Verhindern Sie, dass CheckBox in ListView seinen Prüfstatus durch Scrollen ändert.
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
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