Search code examples
androidspinnerandroid-arrayadapter

Spinner value not update


This is my Country spinner, in this i take the country id and pass in ApiGetState with country code i am getting state list, after getting state list i want to set it in State Spinner, I have done everything but if i select country first time its working fine but if i change the country, state spinner not updating, am i miss something in this code?

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) {

        }
    });

I set the values on StateSpinner here from server:-

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();
                }

Solution

  • i done this thing. Just clear the arraylist before "ApiGetStates(countryCode);" and call "adapter.notifyDataSetChanged();" outside "for loop" as per Sandeep Pareek. e.g:-

    arrayList.clear();
    ApiGetStates(countryCode);