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 fragment spinner 修改默认显示的文本内容
android - Spinner setOnItemClickListener 不接受实现 OnItemClickListener 作为参数的命名类