在我的应用程序中,我有一个带有3个值的微调器。
如果按第一个,则应转到Activity:UploadPicture
如果你按第二个,它应该转到Activity:ChangePassword
如果你按最后一个,它应该转到活动:登录
但是由于spinner在启动时具有第一个值,所以如果选择第一个值,似乎无法触发onItemSelected。 (我不想要第四个值:“请选择一个”)。所以我的问题是如何触发onNothingSelected?因为当我选择第一个值时,它不会触发onItemSelected。
我的代码:
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
System.out.println(pos + " " + first);
if (!first && pos == 0) {
goUpload();
} else if (!first && pos == 1) {
goInternReportActivity();
//spinner.setSelection(0);
} else if (!first && pos == 2) {
goTeksterActivity();
//spinner.setSelection(0);
}
first = false;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
goUpload();
}
答案 0 :(得分:2)
我曾遇到同样的问题,并希望使用onNothingSelected
回调。
我发现如果索引0处的项目也有类似你的方法,我们就不能同时使用onNothingSelected
和onItemSelected
。
根据documentation Spinner onItemSelected
仅在以下情况下调用回调:
新选择的职位与先前选择的职位不同
如果没有选定的项目。
因此,即使您没有碰到您的微调器,也始终会选择索引0项。
即使它不是你想要做的:索引0中的A fourth value "Select Action"
是解决问题的最佳解决方案。
答案 1 :(得分:1)
由于微调器总是在活动创建时选择第一个项目。在这里,您需要为首次活动启动设置标志。试试那段代码。
int a = 1, b = 0;
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if (b < a)
{
b++;
}
else
{
Toast.makeText(context, String.valueOf(parent.getItemAtPosition(position)) , Toast.LENGTH_LONG).show();
}
}
public void onNothingSelected(AdapterView<?> parent) {
return;
}
});
onNothingSelected不是你想要的正确方法。
答案 2 :(得分:1)
我找到了一个解决方案,我在String数组中放了一个第四个元素。
像这样:
public View getCustomView(int position, View convertView,
ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View mySpinner = inflater.inflate(R.layout.custom_spinner, parent,
false);
TextView main_text = (TextView) mySpinner
.findViewById(R.id.text_main_seen);
imageViewLeft = (ImageView) mySpinner.findViewById(R.id.left_pic);
main_text.setText(spinnerValues[position]);
if (numberOfElement >= 1) {
imageViewLeft.setVisibility(View.GONE);
}
if (main_text.getText().equals("")){
main_text.setVisibility(View.GONE);
}
System.out.println(numberOfElement + " " + main_text.getText() + " HEJ");
numberOfElement++;
return mySpinner;
}
但我让它看不见,所以当旋转器打开时它不会被显示出来。因此第一个元素是空的,并包含一个图像,当旋转器关闭而不打开时显示该图像。