即使未选择任何项目,自定义微调器也始终显示所选项目

时间:2014-01-28 07:15:51

标签: android spinner android-arrayadapter

我的微调器的奇怪行为。我有自定义微调器,当没有选择任何东西时,它应该显示一个字符串“选择项目:”。选择某些内容后,应使用所选项目进行更新。我跑了一个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(),但它仍显示相同的结果。当您使用微调器加载页面时,它始终显示第一个项目,甚至在用户选择任何内容之前。

提前感谢任何帮助。

1 个答案:

答案 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