Implementieren einer Listenansicht mit Mehrfachauswahl mit Filter unter Verwendung eines Cursor-Adapters

8

Dieses Problem wird in dieser Frage diskutiert Android: Falsches Element beim Filtern von Listenansicht aktiviert . Um das Problem zusammenzufassen, wenn Sie eine Listenansicht mit einem CursorAdapter und einem Filter verwenden, verlieren Elemente, die in einer gefilterten Liste ausgewählt wurden, ihre Auswahl, nachdem der Filter entfernt wurde. Stattdessen werden Elemente an dieser Position in der ungefilterten Liste ausgewählt.

Verwenden Sie das Codebeispiel in der verknüpften Frage oben, wo sollten wir den Code setzen, um die Kontrollkästchen zu markieren. Ich glaube, es sollte in der getView () - Methode des CustomCursorAdapter sein, aber ich bin mir nicht sicher. Außerdem greifen wir auf das HashSet zu, das alle ausgewähltenIden in der benutzerdefinierten Adapterklasse enthält, da es in der Hauptaktivität, die die Liste enthält, initialisiert und geändert wird.

Meine Aktivität zur Implementierung der ListView

%Vor%

Mein benutzerdefinierter Cursor-Adapter:

%Vor%

}

    
rohitmishra 22.02.2012, 17:31
quelle

1 Antwort

1

Was ich getan habe, hat es gelöst:

cur = Cursor. c = der innere Cursor des simplecursoradapter.

in meiner MainActivity:

%Vor%

in der Listenansicht onItemClickListener:

%Vor%

Im SimpleCursorAdapter habe ich (beide in getView) hinzugefügt:

%Vor%

und:

%Vor%

Ich hoffe, das hilft ... Sie müssen es natürlich an Ihre Bedürfnisse anpassen.

BEARBEITEN:

Heruntergeladenes FB SDK, konnte die FB-Anmeldung nicht passieren. Sie haben einen Fehler, bei dem Sie kein gültiges access_token erhalten, wenn die FB-App auf dem Gerät installiert ist. Entfernte die FB-App und bekam einen FC in getFriends() . Es wurde gelöst, indem der Bereich mit runOnUiThread(new Runnable...) umschlossen wurde.

Der Fehler, den Sie bekommen haben, hat nichts mit schlechtem Filtern zu tun, schlechte Checkbox-Zustände ... Sie erhalten es, weil Sie versuchen, auf den Cursor zuzugreifen, bevor Sie ihn abfragen (bereits geschlossen). Es scheint, als würden Sie den Cursor schließen, bevor der Adapter ihn verwendet. Bestätigt es durch hinzufügen:

%Vor%

zum getView-Bereich in SelectFriendsAdapter.

Nachdem Sie dies hinzugefügt haben, wird es nicht FC und Sie können anfangen, sich um Ihren Filter zu kümmern. Stellen Sie sicher, dass der Cursor nicht geschlossen ist, und wenn Sie ihn mit startManagingCursor() verwalten, müssen Sie ihn nicht manuell schließen.

Ich hoffe, Sie können es von hier aus nehmen!

    
Lior Iluz 22.02.2012, 18:48
quelle