2010-11-22 16 views
4

Das ist mein Problem: Ich schreibe eine alternative Kontakte-App, die mit vielen verschiedenen Sprachen und Alphabeten arbeiten soll. Bei der Abfrage von Namen in meiner eigenen Sprache, Schwedisch, sind die Namen mit Umlaut-Zeichen in einer unlogischen Weise für mich sortiert, aber logisch zu Unicode nehme ich an:Android-Kontakte: Falsche lokalisierte Sortierung/Sortierung

Sollte/schwedischer Stil sein: A, B, C, ... , Z, Å, Ä, Ö.

Abfrageer: A, A, A, B, ..., N, O, O, P, ...

Ich nehme dies ein Problem in jeder Sprache sein wird, die von dem lateinischen Alphabet abweicht . Alle Tests, die ich gemacht habe, sind auf dem Emulator. Meine Entwicklergruppe nimmt Änderungen am Framework vor, so dass Antworten auf niedriger Ebene ebenfalls willkommen sind.

Uri uri = ContactsContract.Contacts.CONTENT_URI; 
String[] projection = new String[] { 
     ContactsContract.Contacts._ID, 
     ContactsContract.Contacts.DISPLAY_NAME, 
     ContactsContract.Contacts.PHOTO_ID 
     }; 
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
mCursor = managedQuery(uri, projection, null, null, sortOrder); 

Update: wir diesen Track derzeit untersucht: Sort a String array, TBC ... Ich habe es auch als ein Problem auf Google Code.

+1

Sind Sie sicher, dass das Gerät korrekte Gebietsschemaeinstellungen hat? Versuchen Sie es mit SQLiteDatabase.setLocale – Mikpa

+1

Nun, die Datenbank wird vom Android-System verwaltet, und SetLocale (Locale l) ist keine statische Funktion. Während ich das doc (2.2) interpretiere, soll der Collator LOCALIZED in der Lage sein, diese Sortierung zu verwalten - aber sie haben keine Dokumentation (das Dokument sagt, XXX ein Link benötigt!: P) – emolaus

Antwort

1

Gaah. Es scheint es so ist:

den folgenden Code in Vanille Java läuft (SE-1.6) erzeugt die gewünschte Ausgabe:

String strings[] = {"Åke", "Äskil", "Otto", "Adam", "Örjan", "Palle", "Nisse"}; 
Locale locale = new Locale("sv", "SE"); 
Collator collator = java.text.Collator.getInstance(locale); 
java.util.Arrays.sort(strings, collator); 

Aber der gleiche Code in Android nicht für mich arbeiten.

Edit: Ich machte eine issue aus diesem auf der Android Google Code-Website, wurde es von einem Kritiker kommentiert.