2012-05-22 5 views
1

Я пытаюсь повторно заполнить Spinner после того, как значения были удалены.Сброс счетчика после удаления значений

В настоящее время приложение устанавливает Spinner со списком строковых значений, а затем, когда приложение используется, некоторые из этих значений удаляются из ArrayAdaptor. Затем в какой-то момент список Spinner необходимо сбросить со списком значений по умолчанию. Мой текущий код просто создает новый ArrayAdaptor и присваивает это к Spinner, используя один и тот же ресурс строки массива, что Spinner изначально установлена ​​с:

Spinner mySpinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, 
    Static.itemList); 
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
mySpinner.setAdapter(arrayAdapter); 

Где Static.itemlist представляет собой массив типа String[].

Как показано на рисунке, элементы удаляются из счетчика, но при использовании вышеуказанного кода значения Spinner не будут сброшены в список, хранящийся в Static.itemList. На мой взгляд, это должно работать, но я ясно пропустил что-то, как нет.

Полный код может быть найден по адресу https://github.com/Uruwolf/VO-Miner/blob/master/src/com/uruwolf/vominer/VoMinerActivity.java. Этот метод относится к строке от 142 до 147 (и я знаю, что отступ выключен, он выглядит хорошо в моем редакторе. Я не уверен, почему это не так на github) ,

Это мой первый вопрос о StackOverflow, поэтому, пожалуйста, дайте мне знать, если я сделал что-то неправильно.

+0

Думая об этом https://github.com/Uruwolf/VO-Miner/blob/654b0bc40c4a1934e45bb7e13860b754a2d4594e/src/com/uruwolf/vominer/VoMinerActivity.java бы лучше ссылку для кода. (Ссылки на коммит, а не мастер) – Uru

ответ

3

Возможно, вам понадобится позвонить notifyDataSetChanged() на адаптер после изменения списка.

Я думаю, что лучший подход заключается в том, чтобы избежать повторного создания нового адаптера и вызвать notifyDataSetChanged() после того, как вы повторно добавили данные в основной список. На самом деле вам не нужно заново создавать адаптер, поскольку ничего в адаптере ничего не меняется, кроме списка данных, который адаптер указывает на. Поскольку адаптер просто указывает на список и не использует/не содержит сам список, если вы измените список ссылок, адаптер должен иметь возможность подбирать изменения (при уведомлении).

Нечто подобное может работать

Определение переменных

Static.itemlist ... /*This list is static. Data never changes */ 
List<String> myListOfStrings; 
ArrayAdapter<String> arrayAdapter; 

Инициализировать счетчик и адаптер

Spinner mySpinner = (Spinner) findViewById(R.id.spinner); 

arrayAdapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1,  myListOfStrings); 

arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

mySpinner.setAdapter(arrayAdapter); 

Освежающий адаптер

myListOfStrings.clear(); 

myListOfStrings.addAll(Static.itemList); = /* Copy/Add the data from Static.itemList into myListOfStrings */ 

arrayAdapter.notifyDataSetChanged(); /* Inform the adapter we've changed items, which should force a refresh */ 
+0

Большое спасибо. Это решает проблемы, которые я испытывал. – Uru

Смежные вопросы