1

xml から約 20,000 個の文字列を読み込んでいますが、アプリが実際に提案するまでには非常に時間がかかります。入力Craすると、最初の提案Valea Crabuluiが表示Craiovaされ、文字列に含まれていますが、後で提案されます。

AutoCompleteTextView単語全体に一致する単語のみを提案するにはどうすればよいですか?

4

1 に答える 1

3

に使用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 {

そのため、フィルターは、最も関連性の高いフィルター結果として、結果の上部にある提案された文字列から始まる値を追加します。

于 2012-07-20T07:54:15.310 に答える