2010-08-14 78 views
16

我正在做一個簡單的程序,使用MultiAutoCompleteTextView在輸入幾個字母時提示常用詞。當我使用「MultiAutoCompleteTextView」時,如何用空格替換逗號

代碼:

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", 
    }; 

現在,當我輸入'A'並選擇「ABCD」但結果卻成爲 「ABCD」。如何用空格替換逗號?

謝謝!

回答

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

我正在做類似的事情! stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42 2012-10-12 08:08:34

+1

在'findTokenStart'中,您向後迭代,然後向前....看起來像一次?爲什麼要這樣做? – 2015-02-26 04:33:20

+1

你應該使用Character.isWhitespace而不是比較''這種方式,它適用於換行符和製表符等 – SteelBytes 2015-09-16 06:49:44

2

做到這一點的方法是實施您自己的Tokenizer。逗號出現的原因是因爲您使用的是CommaTokenizer,這是專門設計用來做到這一點的。如果您需要參考如何實現您自己的SpaceTokenizer,還可以查看the source code for CommaTokenizer

+0

哦,謝謝你。 但是,當我包含「MultiAutoCompleteTextView.java」,我遇到一個錯誤「com.android.internal.R無法解析」,我無法找到該文件... – huaigu 2010-08-15 01:53:56

+0

Tokenizer鏈接已損壞。 – Elizeu 2016-07-09 18:57:41

+0

@Daniel,你能更新標記器源代碼的鏈接嗎?鏈接被破壞。 – tpk 2016-09-01 11:35:24

1

檢查我的提問/回答

How to replace MultiAutoCompleteTextView drop down list

,你會發現一個SpaceTokenizer類

+0

是否可以在不使用標記器的情況下實現這一點?我的意思是,例如,如果我不需要任何逗號或空格作爲標記化器,那麼可擴展功能的工作原理是什麼? – k2ibegin 2015-07-30 10:05:11

+0

你可以用你想要的任何字符改變分隔符的值。不知道你不想使用tokenizer的原因,但如果你願意的話,你可以刪除tokenizer實例。 – vsm 2015-07-31 14:08:43

+0

我更改爲空間標記器,但如果我的條紋(在多自動完成的文本視圖中)已經包含空格。例如。人名,那麼我需要採取一些其他tokenizer或空間也可以在這個scneario中工作正常嗎? – k2ibegin 2015-07-31 15:04:37