setOnItemClickListener doesn't work with android Spinner. Here is my code:
supplier.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
String msupplier=supplier.getSelectedItem().toString();
Log.e("Selected item : ",msupplier);
}
});
setOnItemClickListener will not work with android spinner.Alternatively, try using this method:
setOnItemSelectedListener
Change your code like this:
supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
String msupplier=supplier.getSelectedItem().toString();
Log.e("Selected item : ",msupplier);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
1. I think you should check your xml file which contains the spinner. Make sure haven't set android:clickable = "false"
.
2. please check your spinner adapter and make sure in your getView(int position, View convertView, ViewGroup parent)
method, you haven't set any widget click callback event such as Button
, Imageview
, TextView
OnItemSelectedListener()
serves a different purpose than a click listener. Most importantly, it doesn't fire if you click on the currently selected item again. In some cases this might not be a problem but in other cases, it might well be. So the real answer is not to tell people to use a different and probably unsuitable listener but to solve the original problem. :-)
Fortunately, we can place the click listener on the adapter instead:
public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter {
protected OnItemClickListener listener;
public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) {
super();
this.listener = listener;
}
@Override
public View getDropDownView(final int position, View convertView, final ViewGroup parent) {
if (convertView == null)
convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null)
listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position));
}
});
// ...
return convertView;
}
}
and then we can use it as usual, with the only difference of not setting it on the spinner but on the adapter instead:
Spinner spinner = (Spinner) findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO
}
});
spinner.setAdapter(spinnerAdapter);
I may be going off course, but thought to suggest you to use OnItemSelectedListener
which is broader than OnItemClickListener
for Spinners:
supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//do something here
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//optionally do something here
}
});
使用getItemAtPosition:
supplier.getItemAtPosition(position).toString();
Use this
supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
I think supplier
in your code means spinner
, do Replace this line
String msupplier=supplier.getSelectedItem().toString();
with the below line:
String msupplier= supplier.getItemAtPosition(position).toString();
i have faced this issues. setOnItemClickListener will not works with spinner. My solution is as following:
mSpinnerYears.setAdapter(adapter);
mSpinnerYears.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Logger.d(new StringBuilder(2).append("TAG:").append(TAG).toString(),
new StringBuilder(3).append("click pos = ").append(position).append(
mSpinnerYears.getItemAtPosition(position).toString()).toString());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.