Android Spinner - 确认(不更改)选择后向前聚焦

Posted

技术标签:

【中文标题】Android Spinner - 确认(不更改)选择后向前聚焦【英文标题】:Android Spinner - Focus forward after confirming (not changing) selection 【发布时间】:2021-12-16 23:47:17 【问题描述】:

我想开发一个可以在带有外接键盘的设备上运行的 android 应用。用户应该能够使用回车键浏览表单。现在,我遇到了 Spinner 和 Button 的问题。

(我发现)将焦点从 Spinner 转移到 Button 的唯一方法是使用 setOnItemSelectedListener

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) 
            root.findViewById(R.id.button).requestFocus();
        

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) 
    );

当用户从 Spinner 中选择另一个项目而不是当前值时,此方法有效。但是,当用户打开对话框(输入),然后不选择另一个值(但按 enter 确认当前选择)时,它不起作用。我猜OnItemSelected-Event 不会在值不变时触发。

有人知道我该如何实现吗?

【问题讨论】:

也许setOnItemClickListener 会有所帮助?因为无论您点击哪个项目,都应该调用它。或者尝试在onNothingSelected 中添加相同的代码(我假设当您不选择任何内容或再次选择相同的项目时可能会调用它。 "您不应为微调器调用 OnItemClickListener。微调器不支持项目单击事件。" (见***.com/questions/51683253/…)。不幸的是,当同一项目保持选中状态时,不会调用 onNothingSelected... 【参考方案1】:

如果您不更改选择,则不会调用微调器中的onItemSelected,那么您将不得不执行类似的操作

通过向微调器添加一个默认值(如“请选择”)来强制用户从微调器中选择某些内容。因此,如果他没有选择,您也可能会显示一些错误消息,最终您的 onItemSelected 侦听器会被调用。

【讨论】:

这可能是一个解决方案。但这会使输入动作复杂化。该应用程序应允许使用相同的微调器选择快速重复输入 @ frid000不幸的是,在旋转器中onItemSelected在选择时未调用时,选择不会改变是android的缺点和限制。 span> 【参考方案2】:

我最终使用了这个答案中的解决方案:(扩展了 Spinner 类)

How can I get an event in Android Spinner when the current selected item is selected again?

然后,可以将焦点转移到下一个项目

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) 
            root.findViewById(R.id.Button).requestFocus();
        

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) 
        
    );

【讨论】:

以上是关于Android Spinner - 确认(不更改)选择后向前聚焦的主要内容,如果未能解决你的问题,请参考以下文章

如何更改android spinner 背景

Android Spinner 下划线颜色

Android Spinner 下拉箭头不显示

android spinner默认啥都不选择

Android fragment spinner 修改默认显示的文本内容

android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类