[英]setOnItemClickListener doesn't work with Android Spinner
setOnItemClickListener doesn't work with android Spinner. setOnItemClickListener不能与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: setOnItemClickListener不能与android spinner一起使用。或者,尝试使用此方法:
setOnItemSelectedListener
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. 1.我认为你应该检查包含微调器的xml文件。 Make sure haven't set
android:clickable = "false"
. 确保没有设置
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
2.请检查您的微调器适配器并确保在您的
getView(int position, View convertView, ViewGroup parent)
方法中,您还没有设置任何小部件单击回调事件,如Button
, Imageview
, TextView
OnItemSelectedListener()
serves a different purpose than a click listener. OnItemSelectedListener()
与单击侦听器的用途不同。 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: 幸运的是,我们可以将click侦听器放在适配器上:
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: 我可能会偏离
OnItemSelectedListener
,但是建议你使用OnItemSelectedListener
,它比OnItemClickListener
更广泛的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 我认为代码中的
supplier
意味着spinner
,请更换此行
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.
setOnItemClickListener不适用于微调器。 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) {
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.