我从我的布局上以一个以编程方式创建的AutoCompleteTextView
视图开始。用户在字段中键入有效数据后,我将以相同的方式在第一个对象下创建一个新的AutoCompleteTextView
对象,并使用相同的参数。我将所有字段引用存储在ArrayList
中以跟上最后一个字段引用,这样我就可以确保只在底部的字段下面有新字段(基本上<参考列表中的最后一个元素) - 所以它会在每个字段中继续。
我想添加此功能:创建新字段时,我将最后一个字段的IME选项更改为EditorInfo.IME_ACTION_NEXT
和nextFocusForward
属性到新创建的字段 - 也以编程方式。我想要实现的目标:当用户在键盘上按Enter键时,最后一个字段的焦点跳转到新字段。我使用此代码设置新的IME选项:
ArrayList<AutoCompleteTextView> fields = new ArrayList<>();
//Creating freshlyCreatedField, IT'S STILL NOT IN THE fields LIST!
AutoCompleteTextView currentlySelectedField = fields.get(fields.size() - 1); // last element
currentlySelectedField.setImeOptions(EditorInfo.IME_ACTION_NEXT);
currentlySelectedField.setNextFocusForwardId(freshlyCreatedField.getId());
currentlySelectedField.setSingleLine(true); //ACTV needs it to get IME to work
//Adding freshlyCreatedField to the fields list,
//so next time it will be the currentlySelectedField
但是在运行此代码后,当前选定的AutoCompleteTextView
对象没有任何反应。清除和请求焦点不起作用,并使其以相反的方式工作(创建+1&# 34;每次看不见的&#34;(技术GONE
)字段会更痛苦。
还有一件事:选择任何其他字段并重新选择配置更改后,Enter按钮将首次运行! 如果我可以执行此操作同样的编程,它会解决我的问题......所以,任何想法如何做到这一点? (当然,我也欢迎更好的解决方案......;))
答案 0 :(得分:0)
几天后,我又开始玩这个问题了。 是 ,这是一个解决方案,但 没有 ,它并不像我想的那样漂亮。 ..
无论如何,我创建了这段代码:
ArrayList<AutoCompleteTextView> fields = new ArrayList<>();
//Creating freshlyCreatedField, IT'S STILL NOT IN THE fields LIST!
//Last element
AutoCompleteTextView currentlySelectedField = fields.get(fields.size() - 1);
currentlySelectedField.setOnEditorActionListener(
new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_NEXT
|| actionId == EditorInfo.IME_ACTION_DONE
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
freshlyCreatedField.requestFocus();
handled = true;
}
return handled;
}
});
//Adding freshlyCreatedField to the fields list,
//so next time it will be the currentlySelectedField
我将EditorActionListener
放到实际处于编辑状态的字段中,其中键盘侦听其中一个IME_ACTION_NEXT
(如果已经设置)和IME_ACTION_DONE
操作ID(默认值),或者 Enter 键(如果有人想使用物理键盘的情况)。然后它跳到下面的字段。
效果很好,这种方法没有可怕的问题。但是我有点难过,因为所有这些可能性都是隐形的。 Done 操作按钮只能通过点击其他地方切换到 Next ,因为我在我的问题中写下了它。所以我认为我的“解决方案”可以起作用,但这不是最好的答案,所以如果你有另外的想法,请随意写下你的想法... :)