Android: ограничение размера строки-массива для AutoCompleteTextView - PullRequest
2 голосов
/ 19 мая 2011

Я хотел бы иметь функцию автозаполнения для моих пользователей, когда они вводят текст в текстовое поле. Это легко достижимо с AutoCompleteTextView в Android. Первоначально я строю свой массив строк в /res/values/strings.xml как

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="autocomplete_list">
    <item>text 1</item>
    <item>text 2</item>
    <item>... (many more) ...</item>
    <item>text 1499</item>
    <item>text 1500</item>
</string-array>
</resources>

В моем коде Java у меня есть

    // load autocomplete list
    String[] textList= getResources().getStringArray(R.array.autocomplete_list);
    myAutoCompleteTextView.setAdapter(new ArrayAdapter<String>(this, R.layout.autocomplete_list, textList));

Это работало нормально, когда у меня есть только несколько вещей в моей строке. Однако, если мой список очень длинный, скажем, более 1000 элементов, я получаю ошибку во время выполнения. Приложение будет закрыто само по себе без предупреждения (ошибка принудительного закрытия приложения отсутствует). Это просто исчезает. Ничего в logcat.

Итак, превышаю ли я максимальный индексируемый элемент в массиве строк в Java? это то, что вызывает проблему? Если так, кто-нибудь знает, что такое максимум? Это не похоже на проблему с памятью, так как я не получаю ошибку OutOfMemory.

Edit:

Так что, по-видимому, это широко известная проблема, похоже на ограничение getResource (). GetStringArray () ограничение

Должен ли я использовать что-то отличное от getResource (). GetStringArray () для заполнения большого массива?

Собираюсь сначала попробовать его решение, чтобы увидеть, насколько хорошо оно работает, но если вы знаете лучший способ сделать это, пожалуйста, не стесняйтесь поделиться. Спасибо!

1 Ответ

1 голос
/ 26 ноября 2011

Я тоже нашел эту проблему. В конце концов мне пришлось разделить мой массив на несколько элементов, прочитать каждый из них с помощью getResources (). GetStringArray (), а затем использовать обычную Java, чтобы объединить их все вместе в ArrayList или аналогичном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...