AutoCompleteTextView提供的建议将取代整个视图内容。是否有View
类在单词级别提供此功能?例如,如果我有“所有工作而不是pl”,那么我应该能够建议“播放”,“请”等等,这将完成该单词。如果我选择“播放”它应该变成“所有工作而不是播放”。
答案 0 :(得分:2)
可以使用MultiAutoCompleteTextView和自定义Tokenizer
我已经从Android的源代码重新调整了CommaTokenizer,以便可以使用任何字符来分割MultiAutoCompleteTextView中的单词。小心,未经测试的代码
public static class CustomTokenizer implements MultiAutoCompleteTextView.Tokenizer {
private final char WHITE_SPACE = ' ';
private final char TOKEN_TERMINATING_CHAR;
private final String TOKEN_TERMINATING_STRING;
public CustomTokenizer(char tokenTerminatingChar) {
TOKEN_TERMINATING_CHAR = tokenTerminatingChar;
if (TOKEN_TERMINATING_CHAR == WHITE_SPACE) {
TOKEN_TERMINATING_STRING = String.valueOf(TOKEN_TERMINATING_CHAR);
} else {
TOKEN_TERMINATING_STRING = String.valueOf(TOKEN_TERMINATING_CHAR) + String.valueOf(WHITE_SPACE);
}
}
@Override
public int findTokenStart(CharSequence text, int cursor) {
int i = cursor;
while (i > 0 && text.charAt(i - 1) != TOKEN_TERMINATING_CHAR) {
i--;
}
while (i < cursor && text.charAt(i) == WHITE_SPACE) {
i++;
}
return i;
}
@Override
public int findTokenEnd(CharSequence text, int cursor) {
int i = cursor;
int len = text.length();
while (i < len) {
if (text.charAt(i) == TOKEN_TERMINATING_CHAR) {
return i;
} else {
i++;
}
}
return len;
}
@Override
public CharSequence terminateToken(CharSequence text) {
int i = text.length();
while (i > 0 && text.charAt(i - 1) == WHITE_SPACE) {
i--;
}
if (i > 0 && text.charAt(i - 1) == TOKEN_TERMINATING_CHAR) {
return text;
} else {
if (text instanceof Spanned) {
SpannableString sp = new SpannableString(text + TOKEN_TERMINATING_STRING);
TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
Object.class, sp, 0);
return sp;
} else {
return text + TOKEN_TERMINATING_STRING;
}
}
}
}
答案 1 :(得分:1)
我认为您可以通过自定义实现Filterable的Adapter来实现,通过重写方法getFilter()可以返回自定义Filter。
在自定义Filter中,将覆盖名为performFiltering(CharSequence前缀)的方法。 参数前缀是&#34;所有工作,没有pl&#34;在你的例子中,你可以解析它并获得&#34; pl&#34;然后是时候获得匹配单词并返回它们。
在另一个重写方法publishResults(CharSequence约束,FilterResults结果)中,您可以获得建议结果并执行某些操作来刷新UI,像notifyDataSetChanged()一样刷新ListView。
最后,你可以添加&#34;所有的工作,没有&#34;在&#34; play&#34;之前在用户单击时,在AutoCompleteTextView的OnItemClickListener中。
以下是如何在Mithun的回答中定制适配器和过滤器的代码:
Android AutoCompleteTextView with Custom Adapter filtering not working