我的微调器的奇怪行为。我有自定义微调器,当没有选择任何东西时,它应该显示一个字符串“选择项目:”。选择某些内容后,应使用所选项目进行更新。我跑了一个setOnItemSelectedListener
,但它总是一个选定的项目。基本上是列表中的第一个。这是我的getView()
代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View row = inflater.inflate(R.layout.spinner_placeholder, parent, false);
itemText = (TextView) row.findViewById(R.id.itemText);
final String userSelection = spinner.getSelectedItem().toString();
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
itemText.setText(userSelection);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
itemText.setText("Select item below");
}
});
return row;
}
有谁知道为什么会这样?我想我已经正确设置了它。我将setOnItemSelectedListener
移到我的自定义适配器外部的oncreate()
,但它仍显示相同的结果。当您使用微调器加载页面时,它始终显示第一个项目,甚至在用户选择任何内容之前。
提前感谢任何帮助。
答案 0 :(得分:0)
只要Spinner的适配器包含至少一个项目,就会始终选择其中一个项目。默认情况下,它将位于零位置,即您在此处看到的列表中的第一个位置。使用Spinner,确实没有选择任何项目的概念。
此外,onNothingSelected()不会按照您的想法执行操作。来自文档:
“当选择从此视图中消失时要调用的回调方法。例如,当激活触摸或适配器变空时,选择可能会消失。”
解决问题的简单方法是将适配器列表中的第一项设置为“选择下面的项目”。然后在代码的其他地方,如果getSelectedItemPosition()返回零,则表示尚未进行有效选择。
编辑:
如果使用游标适配器,您可以使用UNION将“请选择”行作为第一个条目。例如:
SELECT _id, item, 1 AS sort
FROM table
UNION
SELECT 0 AS _id, 'Please select' AS item, 0 AS sort
ORDER BY sort, date