Search code examples
javaandroidandroid-fragmentsandroid-spinneronitemselectedlistener

Android onItemSelected Spinner not activating


My application is not initiating the onItemSelected method, when I change my spinner view. It should work fine, but it is not functioning.

class UnitConverter extends Fragment implements OnItemSelectedListener{
    Spinner spinner, spinner2;
    ArrayAdapter<CharSequence> adapter, kilogramAdapter, metreAdapter;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater,container,savedInstanceState);
        View v = inflater.inflate(R.layout.activity_converter, container, false);
        spinner = (Spinner) v.findViewById(R.id.SI_spinner);
        spinner2 = (Spinner) v.findViewById(R.id.spinner1);

        adapter = ArrayAdapter.createFromResource(getActivity(), R.array.si_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        metreAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.metre_array, android.R.layout.simple_spinner_item);
        metreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        kilogramAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.kilogram_array, android.R.layout.simple_spinner_item);
        kilogramAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);
        spinner2.setAdapter(metreAdapter);
        return v;
    }

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){
        spinner2.setAdapter(kilogramAdapter);
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }
}

Solution

  • You need to register the listener with your spinner like below code

    if you are implementing the OnItemSelectedListener like you are doing in the code provided by you. then register the listener like this

    spinner.setOnItemSelectedListener(this);
    

    or if you are creating a new class implementing the OnItemSelectedListener interface.

    then you can register that class with your spinner view like this

     spinner.setOnItemSelectedListener(new MyCustomListener());
    
    
    private class MyCustomListener implements OnItemSelectedListener
    {
     @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){
            // Write your logic what you want to do on selecting the item
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
    
        }
    }