xml から約 20,000 個の文字列を読み込んでいますが、アプリが実際に提案するまでには非常に時間がかかります。入力Cra
すると、最初の提案Valea Crabului
が表示Craiova
され、文字列に含まれていますが、後で提案されます。
AutoCompleteTextView
単語全体に一致する単語のみを提案するにはどうすればよいですか?
xml から約 20,000 個の文字列を読み込んでいますが、アプリが実際に提案するまでには非常に時間がかかります。入力Cra
すると、最初の提案Valea Crabului
が表示Craiova
され、文字列に含まれていますが、後で提案されます。
AutoCompleteTextView
単語全体に一致する単語のみを提案するにはどうすればよいですか?
に使用ArrayAdapter
している場合は、ここよりhttps://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.javaAutoCompleteTextView
のフィルターのデフォルトの実装を確認できますArrayAdapter
の内部クラスArrayFilter
からArrayAdapter
:
for (int i = 0; i < count; i++) {
final T value = values.get(i);
final String valueText = value.toString().toLowerCase();
// First match against the whole, non-splitted value
if (valueText.startsWith(prefixString)) {
newValues.add(value);
} else {
final String[] words = valueText.split(" ");
final int wordCount = words.length;
// Start at index 0, in case valueText starts with space(s)
for (int k = 0; k < wordCount; k++) {
if (words[k].startsWith(prefixString)) {
newValues.add(value);
break;
}
}
}
}
フィルターは、必要な関連性によって一致したアイテムを並べ替えないことがわかります。アダプター用に独自のフィルターを作成する必要があります。
その代わり
// First match against the whole, non-splitted value
if (valueText.startsWith(prefixString)) {
newValues.add(value);
} else {
使用する必要があるかもしれません
// First match against the whole, non-splitted value
if (valueText.startsWith(prefixString)) {
newValues.add(0, value);
} else {
そのため、フィルターは、最も関連性の高いフィルター結果として、結果の上部にある提案された文字列から始まる値を追加します。