Benutzerdefinierte Liste Klicken mit Kontrollkästchen
-
23-08-2019 - |
Frage
Ich habe eine ListActivity
von einem Cursor
mit SimpleCursorAdapter
bevölkert, die eine andere Aktivität beginnt, wenn eine der Listenelemente geklickt wurden. Ich bin auch ViewBinder
mit einiger benutzerdefinierten Transformation der Daten zu tun.
Ich möchte ein CheckBox
auf jede Zeile in der Liste hinzufügen, damit ich die Ansicht und hat eine CheckBox
mit der Schwerkraft rechts geändert haben.
die CheckBox
Hinzufügen hat die Fähigkeit, entfernt auf die Elemente zu klicken. Die onListItemClick
Methode wurde ich in ListActivity
überschrieben wird nicht mehr aufgerufen, wenn Sie auf einem Listenelement drücken. die CheckBox
Entfernen behebt diese. Warum ist das?
Auch, wie kann ich die Liste so einrichten, dass es meine erforderliche Funktionalität auszuführen fortgesetzt wird, wenn der Hauptteil des Listenelementes geklickt wird, hat aber zusätzliche Funktionalität, wenn die CheckBox
in der Position geprüft wird? Wird eine onCheckedChangedListener
Arbeit einstellen oder ist die gleiche Ansicht Instanz für jedes Element in der Liste erneut verwendet werden?
Lösung 2
Sieht aus wie SimpleCursorAdapter
zu primitiv ist für das, was ich wollte erreichen.
Ich habe eingeschaltet CursorAdapter
und Rückkehr eine neue Ansicht mit der LayoutInflater
in meiner Implementierung der newView
Methode zur Umsetzung.
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.alarm_row, parent, false);
}
In Bindview Ich habe dann eine benutzerdefinierte OnClickListener
meiner Haupt LinearLayout
und dann eine andere OnCheckedChangeListener
zum CheckBox
.
Für all das Recht zu suchen hatte ich die LinearLayout
der Hintergrund-Set ziehbar auf Android menuitem:
android:background="@android:drawable/menuitem_background"
Andere Tipps
Wie bereits erläutert hier , der Klick-Listener nur Werke wenn keine andere Ansicht ist focusable
. Einstellen des CheckBox
zu focusable="false"
sollte es tun:
<CheckBox android:focusable="false" />