Search code examples
javaadapterandroid-spinner

How can I trigger spinner event when on click?


I followed some examples. they are introducing the way like below. but when I tried that, I got this error

java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
    at android.widget.AdapterView.setOnClickListener(AdapterView.java:1224)
    at com.jakchang.savelocation.databinding.ActivityViewmemoBindingImpl.executeBindings(ActivityViewmemoBindingImpl.java:174)

I just followed examples, but it's not working to me.

need help..thanks in advance

 resList = res.getStringArray(R.array.font_spinner);

    SpinnerAdapter spinnerAdapter= new ArrayAdapter(this,R.layout.support_simple_spinner_dropdown_item,resList);
        binding.fontlist.setAdapter(spinnerAdapter);
        binding.fontlist.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(),"Item : "+binding.fontlist.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
            }

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

            }
        });

Solution

  • Your code snippet isn't complete but I tried to implement it in my own activity, so check the following code and compare it with your solution. I think it should work.

    public class MainActivity extends AppCompatActivity {
        Spinner spinner;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            spinner = findViewById(R.id.spinner);
            SpinnerAdapter spinnerAdapter= new ArrayAdapter(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.font_spinner));
            spinner.setAdapter(spinnerAdapter);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(getApplicationContext(),"Item : "+ spinner.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
        }
    }
    
    

    First you need to get the view and store it in a class variable with the findViewById(R.id.spinner) of course you have to set the id in the xml file. Next in the ArrayAdapter use android.R.layout.simple_spinner_item just to keep it simple. And finally set the adapter and the listener on the spinner object.