【问题标题】:Custom Spinner always shows selected item, even when none is selected自定义微调器始终显示所选项目,即使未选择任何项目
【发布时间】:2014-02-19 08:55:49
【问题描述】:

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

任何帮助表示感谢,在此先感谢。

【问题讨论】:

    标签: android spinner android-arrayadapter


    【解决方案1】:

    只要 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
    

    【讨论】:

    • 感谢您的回复。嗯。我可能会让它显示第一个。我正在从数据库中提取微调器项目,它是基于时间的,所以为这样一个简单的事情设置起来太麻烦了。不能以这种方式设置有点令人失望,但是哦。
    • 如果它是游标适配器,您可以尝试使用 UNION 获取游标中的“选择项目”行并将其排序到顶部。但正如你所说,这取决于它是否值得麻烦。请参阅我上面的编辑以了解我的意思。
    • 谢谢。如果我决定继续前进,我知道现在该往哪个方向研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多