Im trying to get an onClickListener to fire on a Spinner, but i get the following error: Java.lang.RuntimeException is "Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead," the thing is, im sure I want to call onClickListener and NOT onItemClickListener. I found this question asked by someone else on stackOverflow, the question is here: link text
The answer stated there is:
You will have to set the Click listener on the underlying view (normally a TextView with id: android.R.id.text1) of the spinner. To do so:
Create a custom Spinner In the constructor (with attributes) create the spinner by supplying the layout android.R.layout.simple_spinner_item Do a findViewById(android.R.id.text1) to get the TextView Now set the onClickListener to the TextView
I have tried the answer noted there, but it doesnt seem to work, I get a null pointer to the TextView after I do the findViewById().
This is what im doing:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.layoutspinner,dataArray);
spinner.setAdapter(adapter);
TextView SpinnerText = (TextView)findViewById(R.id.spinnerText);
if(SpinnerText==null){
System.out.println("Not found");
}else{
SpinnerText.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
//Do something
}
});
}
layoutspinner.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
android:singleLine ="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="6pt"
android:gravity="right"/>
Any idea what am I doing wrong? I'm new to stack overflow, I didnt find any way to post an aditional question to the other thread (or comment since I have to little rep) so I started a new question.
Edit:
Per recomendation I tried this:
int a = spinnerMes.getCount();
int b = spinnerMes.getChildCount();
System.out.println("Count ="+a);
System.out.println("ChildCount ="+b);
for (int i = 0; i < b; i++) {
View v = spinnerMes.getChildAt(i);
if(v==null){
System.out.println("View not found");
}else{
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Click code
}
});
}
}
But logCat isnt showing promising results.
10-14 16:09:08.127: INFO/System.out(3116): Count =7
10-14 16:09:08.127: INFO/System.out(3116): ChildCount =0
I have tested this on API levels 7 and 8 with same results.