Значение Spinner не обновляется

#android #spinner #android-arrayadapter

Вопрос:

Это мой счетчик стран, в этом я беру идентификатор страны и передаю в ApiGetState с кодом страны, я получаю список штатов, после получения списка штатов я хочу установить его в счетчик штатов, я все сделал, но если я выберу страну в первый раз, она будет работать нормально, но если я изменю страну, счетчик штатов не обновляется, я что-то пропустил в этом коде?

 country.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            scountry = parent.getItemAtPosition(position).toString();
            String cCode = scountry.substring(0, scountry.indexOf("-"));
            countryCode = Integer.parseInt(cCode);
            ApiGetStates(countryCode);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
 

Я устанавливаю значения в StateSpinner здесь с сервера:-

 public void onResponse(Call<StatesModel> call, Response<StatesModel> response) {
            if (response.isSuccessful()){
                StatesModel model = response.body();
                List<StatesModel.StatesModelDetail> list = model.getData();
                for (int i = 0; i < list.size(); i  ){
                    stateData = list.get(i);
                    String stateName = stateData.getName();
                    String code = stateData.getId();
                    String finalname = code   "-"   stateName;
                    arrayList.add(finalname);
                    ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), R.layout.simple_spinner_dropdown, arrayList);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    state.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                }
 

Комментарии:

1. используйте ‘adapter.notifyDataSetChanged();’ после (….) цикла

2. да, как сказал @SandeepPareek, используйте adapter.notifyDataSetChanged(); после цикла

3. и вызовите notifyDataSetChanged только один раз после добавления данных в список массивов.

4. @SandeepPareek я сделал это, но это не работает. что я сделал, пожалуйста, проверьте:- для (int i = 0; i < list.size(); i ){ // некоторый код ArrayList.add(имя финала); } адаптер = новый ArrayAdapter<>(getContext (), R. layout.simple_spinner_dropdown, ArrayList); адаптер.setdropdownviewресурс(android.R.layout.simple_spinner_dropdown_item); состояние.setAdapter(адаптер); адаптер.notifyDataSetChanged();

5. проверьте это и удалите дополнительный код -> > geeksforgeeks.org/spinner-in-android-using-java-with-example

Ответ №1:

я сделал это. Просто очистите список массивов перед «ApiGetStates(код страны)»; и вызовите «adapter.notifyDataSetChanged();» снаружи «для цикла» в соответствии с Sandeep Pareek. например:-

 arrayList.clear();
ApiGetStates(countryCode);