Разработка Android - использование ArrayList <String>против массива строк с ArrayAdapter - PullRequest
3 голосов
/ 25 января 2011

Я новичок в разработке для Android, и у меня возник вопрос об отрывке, который я прочитал в «Руководстве по разработке Android-приложений» от Commonsware. Есть пример, где он создает класс, расширяющий ListActivity, и демонстрирует возможность удаления и удаления из списка через контекстные меню. Перед настройкой ArrayAdapter с источником строк для списка в тексте говорится, что необходимо преобразовать массив String в тип ArrayList, потому что «мы хотим иметь возможность изменять содержимое списка на лету, и это очень проще, если вы используете ArrayList вместо обычного массива String "

Я понимаю эту концепцию, ЕСЛИ мы использовали массив ArrayList или String для непосредственной работы со списком, но почему это имеет значение, если мы используем методы ArrayAdapter.add / insert / remove? Как только ArrayAdapter создан (и из того, что я понимаю из этого файла .java), он превращает исходные данные в объект List, независимо от того, поступают ли они из массива или ArrayList.

Я пытался использовать обычный массив при создании адаптера, и я получил ошибку (как и ожидалось по тексту), но я не понимаю, почему. В чем разница между созданием ArrayAdapter со строковым массивом и ArrayList ... не превратит ли оно его в один и тот же объект List? Есть ли какая-то связь с исходной переменной при попытке добавить / вставить / удалить через адаптер?

Извините за длинный вопрос, но заранее спасибо.

1 Ответ

3 голосов
/ 25 января 2011

Вы можете изменить исходный массив / массив данных.Затем вы вызываете notifyDataSetChanged () на адаптере, и он обновляет список с новой информацией.Если вы используете ArrayList, то вы можете использовать все его обычные операции для вставки / удаления данных с произвольным индексом, который вы не можете сделать с обычным массивом строк.Таким образом, содержимое ListView очень сильно привязано к исходному источнику данных - содержимое не фиксируется адаптером во время вызова myListView.setAdapter ().Однако методы добавления, удаления, вставки и т. Д. Вызовут ошибку, если вы попробуете их с массивом, потому что массив нельзя использовать таким образом.ArrayAdapter фактически преобразует массив String в объект AbstractList, но его нельзя изменить.

...