Hinzufügen von Zeilen in den Cursor manuell
Habe ich eine Reihe von Handy-Nummern und ich will die entsprechenden Kontakte aus der Kontakte-Datenbank.
In der Reihe von Handy-Nummern, ich habe auch einige Nummern, die nicht gespeichert sind, bevor der Kontakt-Datenbank. Zum Beispiel;
- 3333333 -> Tim
- 5555555 -> Jim
- 1111111 -> unbekannt
Habe ich das array mit den Telefonnummern oben gezeigt, nämlich phoneArr.
int size=phoneArr.size();
if(size>0){
Cursor[] cursors=new Cursor[size];
for(int i=0;i<size;i++){
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
}
Cursor phones=new MergeCursor(cursors);
Handys.getCount() gibt 2 zurück, in der das oben beschriebene Szenario. Wenn die Telefonnummer nicht angezeigt, in der Kontaktliste den Mauszeiger leer wird und irgendwie, wenn ich Sie Zusammenführen es nicht tragen überhaupt etwas. Was ich will ist, um einen cursor wie folgt
Cursor-Handys - > {Tim, Jim, 1111111}
Ich denke, ich kann dies tun, indem die Zeile wie folgt manuell:
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
if(cursors[i].getCount()==0)
//add the phone number manually to the cursor
Wie kann ich das erreichen?
Hier ist die PEOPLE_PROJECTION
private static final String[] PEOPLE_PROJECTION = new String[] {
ContactsContract.PhoneLookup._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup.NUMBER
};
InformationsquelleAutor der Frage 0x5f3759df | 2012-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachste Methode zum hinzufügen von Zeilen in einem cursor zu verwenden MatrixCursor und ein MergeCursor.
Diese beiden Klassen sind von der SDK und hier zu lösen diese Art von Problemen.
Im Grunde, was Sie tun, ist :
MatrixCusror
cursor
und IhrematrixCursor
mit einemMergeCursor
Etwas wie:
InformationsquelleAutor der Antwort Timothée Jeannin
Verwende ich eine Lösung, die funktioniert der trick für alle meine unterschiedlichen Bedürfnisse, und die ist einfacher als die Implementierung Cursor.
Hier ist ein Beispiel, wo ich das hinzufügen von zusätzlichen "playlist", Zeilen, die ein Cursor, abgerufen aus dem Mediastore. Ich füge die Zeilen auf den ersten Indizes der ursprünglichen Cursor :
Ursprünglichen cursor hat 2 Spalten (int,String), also Baue ich es mit ein array von extra Zeilen-Objekte.
InformationsquelleAutor der Antwort elgui
Ich weiß, das ein Alter post, aber es ist eine echte Schmerzen, die Zeilen können nicht manuell Hinzugefügt werden, um einen Cursor. Ich habe mit einer plumpen Lösung. Es könnte eine Hilfe sein.
Cursor
ist eigentlich eininterface
und Sie können erstellen Sie eine benutzerdefinierteclass
dassimplements
dieCursor
- Schnittstelle.Und schließlich in Ihrem code
Das sollte es tun. Aber seien Sie gewarnt, obwohl, für diese zu arbeiten, müssen Sie klug sein, während der Umsetzung der
Cursor
- Schnittstelle.InformationsquelleAutor der Antwort Rakib Ansary
Leider, soweit ich weiß, gibt es keine Möglichkeit zum manuellen hinzufügen von Daten zu der cursor. Sie behandeln müssen, das auf eine andere Weise.
Nur so, dass ich mir vorstellen kann in dem Sie dies tun können ist
cursoradapter
Umsetzung einerarrayadapter
.InformationsquelleAutor der Antwort Shubhayu