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

Android Spinner - Focus forward after confirming (not changing) selection

我想开发一个 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) {}
    });

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

有人知道我如何实现吗?

如果您不更改 selection,则微调器中的 onItemSelected 不会被调用,那么您将不得不做这样的事情

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

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

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) {
        }
    });