这就是我定义微调器的方式
s_province = (Spinner) findViewById(R.id.s_province);
ArrayAdapter<String> provinceAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, Data.provinces);
provinceAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s_province.setAdapter(provinceAdapter);
s_province.setOnItemSelectedListener(this);
我的类是从 OnItemSelectedListener
实现的,我覆盖了这个方法
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
switch (arg1.getId()) {
case R.id.s_province:
Log.d("here", "there");
break;
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
但是 onItemSelect
没有被触发,为什么?
最佳答案
两件事:
如果您真的想检查您的方法是否有效,请在
switch
或default
情况下放置一个Log
语句这样您就可以确定正在调用该方法。自 that represents position 起您应该使用
arg2
.让您的开关与位置一起工作,而不是通过传递的任何 View 。还可以使用 Eclipse 分配的默认名称重命名您的变量。arg0,1,2,etc
对您和其他查看您代码的人都没有帮助。
例如
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
Toast.makeText(view.getContext(),"onItemSelected called", Toast.LENGTH_LONG).show();
int spinnerId = parent.getId();
if (spinnerId == R.id.s_province)
{
switch (position)
{
case 0:
//do something if first position was clicked
break:
case 1:
//do something else
break;
default:
//if for any reason no position matches.
break;
}
}
else if (spinnerId == R.other_id_in_xml)
{
switch (position)
{
case 0:
//do something if first position was clicked
break:
case 1:
//do something else
break;
default:
//if for any reason no position matches.
break;
}
}
//etc
}
关于选择项目上的android微调器点击监听器不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656015/