2010-08-14 19 views
16

Ich mache ein einfaches Programm mit MultiAutoCompleteTextView, um die gemeinsamen Wörter, wenn ich mehrere Buchstaben eingeben.Wie das Komma durch ein Leerzeichen ersetzen, wenn ich die "MultiAutoCompleteTextView"

Code:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      this, 
      android.R.layout.simple_dropdown_item_1line, 
      ary); 
    MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.editText); 
    textView.setAdapter(adapter); 

    textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 

    private String[] ary = new String[] { 
     "abc", 
     "abcd", 
     "abcde", 
     "abcdef", 
     "abcdefg", 
     "hij", 
     "hijk", 
     "hijkl", 
     "hijklm", 
     "hijklmn", 
    }; 

Nun, wenn ich Eingang 'a' und wählen "ABCD" aber das Ergebnis zu "ABCD" geworden. Wie ersetzt man das Komma durch ein Leerzeichen?

Vielen Dank!

Antwort

40
public class SpaceTokenizer implements Tokenizer { 

public int findTokenStart(CharSequence text, int cursor) { 
int i = cursor; 

while (i > 0 && text.charAt(i - 1) != ' ') { 
    i--; 
} 
while (i < cursor && text.charAt(i) == ' ') { 
    i++; 
} 

return i; 
} 

public int findTokenEnd(CharSequence text, int cursor) { 
int i = cursor; 
int len = text.length(); 

while (i < len) { 
    if (text.charAt(i) == ' ') { 
     return i; 
    } else { 
     i++; 
    } 
} 

return len; 
} 

public CharSequence terminateToken(CharSequence text) { 
int i = text.length(); 

while (i > 0 && text.charAt(i - 1) == ' ') { 
    i--; 
} 

if (i > 0 && text.charAt(i - 1) == ' ') { 
    return text; 
} else { 
    if (text instanceof Spanned) { 
     SpannableString sp = new SpannableString(text + " "); 
     TextUtils.copySpansFrom((Spanned) text, 0, text.length(), 
       Object.class, sp, 0); 
     return sp; 
    } else { 
     return text + " "; 
    } 
} 
} 
} 
+0

Ich mache etwas ähnliches hier !! stackoverflow.com/questions/12854336/autocompletedtextview-backed-by-cursorloader – toobsco42

+1

In "findTokenStart", iterieren Sie rückwärts, dann weiter .... sieht einmal aus? Warum das tun? –

+1

sollten Sie wahrscheinlich Character.isWhitespace verwenden, anstatt mit '' so zu vergleichen, wie es mit Zeilenumbrüchen und Tabs usw. funktioniert. – SteelBytes

2

Der Weg, es zu tun wäre, um Ihre eigenen Tokenizer zu implementieren. Der Grund für das Komma liegt darin, dass Sie CommaTokenizer verwenden, was genau dafür gedacht ist. Sie können auch the source code for CommaTokenizer betrachten, wenn Sie eine Referenz benötigen, um Ihren eigenen SpaceTokenizer zu implementieren.

+0

oh, danke zu finden. Aber wenn ich die "MultiAutoCompleteTextView.java" einschließen, erhalte ich einen Fehler "com.android.internal.R kann nicht aufgelöst werden", und ich kann diese Datei nicht finden ... – huaigu

+0

Tokenizer Link ist kaputt. – Elizeu

+0

@Daniel, Können Sie den Link für den Quellcode von Tokenizer aktualisieren? Link ist kaputt. – tpk

1

Überprüfen Sie meine Frage/Antwort

How to replace MultiAutoCompleteTextView drop down list

Sie eine SpaceTokenizer Klasse

+0

Ist es möglich, dies zu implementieren, ohne Tokenizer zu verwenden? Ich meine zum Beispiel, wenn ich kein Komma oder Leerzeichen als Tokenizer will dann funktioniert die spannbare Funktionalität wie es ist? – k2ibegin

+0

Sie können den Wert des Trennzeichens mit einem beliebigen Zeichen ändern. Sie kennen nicht den Grund, warum Sie den Tokenizer nicht verwenden möchten. Sie können jedoch die Tokenizer-Instanz entfernen, wenn Sie möchten. – vsm

+0

Ich habe den Platz Tokenizer geändert, aber wenn meine strings (in Multi Auto abgeschlossen Textansicht) bereits Leerzeichen enthalten z. Personenname, muss ich dann einen anderen Tokenizer nehmen OR Raum funktioniert auch in diesem scneario gut? – k2ibegin