I have an error: setOnItemClickListener cannot be used with a spinner, what is wrong?

JavaAndroidAndroid Spinner

Java Problem Overview


Kindly This is my code below, and I am pasting the error messages underneath: I am trying to use setOnItemClickListener on the spinner, is it permissible?

@Override
public void onItemClick(AdapterView<?> arg0, View v, int index,	long arg3) {
	if (quantity[index]=="Meter" ){
		s1="Meter";
		Toast.makeText(v.getContext(), "convert from meter",Toast.LENGTH_SHORT).show();
	} 
}
	   
   });
	
convertto.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> arg, View v1, int index1, long arg4)
    {
	    if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
	    {
	    	Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
			var2=var1;
			lresult.setText("" + var2);
		}
	}	   
});
      
}
 
}

and here are the errors

FATAL EXCEPTION: main
07-04 09:48:39.912: E/AndroidRuntime(694): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.a2zunitconverter.miniproject/com.a2zunitconverter.miniproject.lenght}: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.os.Looper.loop(Looper.java:123)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at java.lang.reflect.Method.invoke(Method.java:507)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at dalvik.system.NativeStart.main(Native Method)
07-04 09:48:39.912: E/AndroidRuntime(694): Caused by: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.widget.Spinner.setOnItemClickListener(Spinner.java:102)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at com.a2zunitconverter.miniproject.lenght.onCreate(lenght.java:31)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-04 09:48:39.912: E/AndroidRuntime(694): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-04 09:48:39.912: E/AndroidRuntime(694): 	... 11 more

Java Solutions


Solution 1 - Java

See the first line of your logcat:

java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.

setOnItemClickListener cannot be used with a Spinner. Use setOnItemSelectedListener instead.

Solution 2 - Java

As @Alex very well said, you have to use

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            
        }

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

        }
    });

Or if you are using ButterKnife:

@OnItemSelected(R.id.spinner)
public void onSpinnerItemSelected(int index){
    // ...
}

Solution 3 - Java

Kotlin:

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
        print("onItemSelected position = $position id = $id")
    }

    override fun onNothingSelected(parent: AdapterView<*>) {

    }
}

I wrote it because inline creating object from the interface is different.

Solution 4 - Java

Simply change your implementation form setOnItemClickListener to setOnItemSelectedListener. Your code should work fine afterwards without error.

Java:

convertto.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            
        }

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

        }
    });

Kotlin:

convertto.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {

    }

    override fun onNothingSelected(parent: AdapterView<*>) {

  }
}

Solution 5 - Java

Change this

 convertto.setOnItemClickListener(new OnItemClickListener()
   {

    @Override
    public void onItemClick(AdapterView<?> arg, View v1, int index1, long arg4)
    {
         if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
        {

        Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
        var2=var1;
        lresult.setText("" + var2);
        }

    }

   });

to onItemSelectedListener,

 convertto.setOnItemSelectedListener(new OnItemSelectedListener() {

	public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
			long arg3) {
		 if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
        {

        Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
        var2=var1;
        lresult.setText("" + var2);
        }

		
	}

	public void onNothingSelected(AdapterView<?> arg0) {
		// TODO Auto-generated method stub
		
	}
});

It looks like you cannot use itemClickListener in your Spinner,

Here is the error line which explains it,

07-04 09:48:39.912: E/AndroidRuntime(694): Caused by: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.

Solution 6 - Java

Solved by

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int  
 i, long l) {

        }

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

        }
    });

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSalman AmjadView Question on Stackoverflow
Solution 1 - JavaAlex LockwoodView Answer on Stackoverflow
Solution 2 - JavavoghDevView Answer on Stackoverflow
Solution 3 - JavaMBHView Answer on Stackoverflow
Solution 4 - JavaTaslim OseniView Answer on Stackoverflow
Solution 5 - JavaAndro SelvaView Answer on Stackoverflow
Solution 6 - JavaMuzmail HussainView Answer on Stackoverflow