Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义微调器始终显示选定项,即使未选择任何项_Android_Spinner_Android Arrayadapter - Fatal编程技术网

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

Android 自定义微调器始终显示选定项,即使未选择任何项,android,spinner,android-arrayadapter,Android,Spinner,Android Arrayadapter,我的纺纱工的古怪行为。我有一个自定义微调器,当没有选择任何内容时,它会显示一个字符串“Select Item:”。当选择某个内容时,该内容应使用所选项目进行更新。我运行了一个setOnItemSelectedListener,但它始终是一个选中的项目。基本上是列表中的第一个。这是我的getView()代码: @Override public View getView(int position, View convertView, ViewGroup parent) { Layo

我的纺纱工的古怪行为。我有一个自定义微调器,当没有选择任何内容时,它会显示一个字符串“Select Item:”。当选择某个内容时,该内容应使用所选项目进行更新。我运行了一个
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;
    }
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气机=getActivity().GetLayoutFlater();
视图行=充气器。充气(R.layout.spinner\u占位符,父项,false);
itemText=(TextView)row.findViewById(R.id.itemText);
最终字符串userSelection=spinner.getSelectedItem().toString();
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
itemText.setText(userSelection);
}
@凌驾
未选择公共无效(AdapterView arg0){
setText(“选择下面的项目”);
}
});
返回行;
}
有人知道为什么会这样吗?我想我已经把它设置正确了。我将
setOnItemSelectedListener
移动到自定义适配器外部的
oncreate()
,但它仍然显示相同的结果。使用微调器加载页面时,它始终显示第一项,甚至在用户选择任何内容之前


感谢您的帮助。

只要微调器的适配器至少包含一项,就会始终选择其中一项。默认情况下,位置为零,即您在此处看到的列表中的第一个位置。使用微调器,实际上不存在不选择任何项目的概念

此外,onNothingSelected()不会做您认为它会做的事情。从文件中:

“当选择从此视图中消失时调用的回调方法。例如,当触控激活或适配器变空时,选择可能消失。”

解决此问题的简单方法是将适配器列表中的第一项设置为“选择下面的项”。然后在代码的其他地方,如果getSelectEditePosition()返回零,您就知道还没有进行有效的选择

编辑:

如果使用游标适配器,则可以使用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在游标中获取“Select item”行,并将其排序到顶部。但正如你所说,这取决于它是否值得这么麻烦。请看我的编辑上面的一个例子,我的意思。谢谢。如果我决定继续下去,我现在知道该往哪个方向看。