Search code examples
androidandroid-spinneronitemselectedlistener

Spinner setOnItemSelectedListener is not invoked


I checked the related questions to this problem and tried some of the suggestion but still it dosen't seem to execute the setOnItemSelectedListener event. Here is my activity code :

    private void init() {
       pays = (Spinner) findViewById(R.id.pays_spinner);
       populatePays();
    }       

    List<String> list;
    public void populatePays(){
        list = new ArrayList<String>();
        apiService = RestService.createService(SolarAPIService.class);
        Call<ArrayList<String>> call = apiService.listPays();
        call.enqueue(new Callback<ArrayList<String>>() {
                @Override
                public void onResponse(Call<ArrayList<String>> call, Response<ArrayList<String>> response) {
                    for(String pays: response.body()) {
                           list.add(pays);
                     }
                  }

                @Override
                    public void onFailure(Call<ArrayList<String>> call, Throwable t) {

                    }
                });

   ArrayAdapter<String> dataAdapter= new ArrayAdapter<String>
           (this, android.R.layout.simple_spinner_item, list);
   dataAdapter.setDropDownViewResource
           (android.R.layout.simple_spinner_dropdown_item);
   pays.setAdapter(dataAdapter);
   pays.setSelection(1);
   pays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
       @Override
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
           nompays=pays.getItemAtPosition(position).toString();
           Toast.makeText(getApplicationContext(),
                   "Selected Country : " + nompays, Toast.LENGTH_LONG).show();
           populateVille(nompays);
       }

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

       }
   });

I would appreciate your help. Thank you !


Solution

  • set spinner adapter after list has been filled.

    private void init() {
        pays = (Spinner) findViewById(R.id.pays_spinner);
        populatePays();
    }
    
    List<String> list;
    
    public void populatePays() {
        list = new ArrayList<String>();
        apiService = RestService.createService(SolarAPIService.class);
        Call<ArrayList<String>> call = apiService.listPays();
        call.enqueue(new Callback<ArrayList<String>>() {
            @Override
            public void onResponse(Call<ArrayList<String>> call,                    Response<ArrayList<String>> response) {
                for (String pays : response.body()) {
                    list.add(pays);
                }
                setSpinnerAdapter();
            }
    
            @Override
            public void onFailure(Call<ArrayList<String>> call, Throwable t) {
    
            }
        });
    
    private void setSpinnerAdapter() {
    
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource
                (android.R.layout.simple_spinner_dropdown_item);
        pays.setAdapter(dataAdapter);
        pays.setSelection(1);
        pays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                nompays = pays.getItemAtPosition(position).toString();
                Toast.makeText(getApplicationContext(),
                        "Selected Country : " + nompays, Toast.LENGTH_LONG).show();
                populateVille(nompays);
            }
    
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
    
            }
        });
    }