Мой адаптер.notifyDataSetChanged () не работает - PullRequest
2 голосов
/ 18 сентября 2011

Как обновить ArrayAdapter моим новым массивом?

Belwo - мой ArrayAdapter с добавленным в него массивом по умолчанию.

String[] array_spinner = new String[]{"Select your state."};
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item,array_spinner);
adapter.setDropDownViewResource(R.layout.state_spinner_layout);
Myspinner.setAdapter(adapter);

Теперь я загружаю некоторые данные JSON, которые анализируют информацию, в array_spinner_data, и я хочу вызвать notifyDataSetChanged ()

array_spinner = new String[]jsonArray.length(); 


        for (int i=0; i<jsonArray.length(); i++)
        {   
            String styleValue = jsonArray.getJSONArray(i).getString(0);    
            Log.d(TAG, styleValue);
            array_spinner[i] = styleValue;

        }
        Log.d(TAG, String.valueOf(array_spinner.length));
        adapter.notifyDataSetChanged();

Я не вижу никаких ошибок, и все мои Log.d возвращаются, как они должны. Но когда я нажимаю на мой счетчик, все, что отображается, это оригинальный Select your state, я пропускаю некоторые базовые элементы загрузки onCreate и Json, но если кому-то нужно это увидеть, просто дайте мне знать.

Ответы [ 3 ]

11 голосов
/ 18 сентября 2011

notifyDataSetChanged «не работает», потому что вы не изменяете набор данных, вы создаете новую копию, о которой адаптер не знает.Используйте List<> вместо массива и измените того того же объекта списка, который вы передали адаптеру, и он будет работать.Если вы хотите сохранить свой текущий код, вам нужно создать новый адаптер поверх нового набора данных и применить его к вашему счетчику.

0 голосов
/ 13 сентября 2016
  • Сначала создайте список
  • Перед перезагрузкой списка каждый раз с новым значением вы должны очистить существующее значениеa
  • Наконец используйте DataAdapter.notifyDatachanged (),функция

    private Spinner spinnerTest;
    ArrayList<String> list_spinnerTest = new ArrayList<String>();
    
    list_spinnerTest.clear();
    
    String[] NameArray=new String []{"Load From Array","bbbbbbbb","cccccccccc","ddddddddd","eeeeeeeeee"};
    int count=5;
    for (int i = 0; i < count; i++) {
        list_spinnerTest.add(NameArray[i]);
    }
    ArrayAdapter<String> dataAdapterSpinner=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list_spinnerTest);
    dataAdapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerTest.setAdapter(dataAdapterSpinner);
    
    dataAdapterSpinner.notifyDataSetChanged();
    
0 голосов
/ 27 октября 2015

не создавать новый список, очистить существующий список, затем вызвать notifydatasetchanged

someArrayList.clear();
someArrayList.add("element 1");
someArrayList.add("element 2");
yourAdapter.notifyDataSetChanged();
...