【问题标题】:Android AutoCompleteTextView - handle dynamic IME option change by "re-selecting" viewAndroid AutoCompleteTextView - 通过“重新选择”视图处理动态 IME 选项更改
【发布时间】:2018-02-15 01:44:26
【问题描述】:

我从一个以编程方式在我的布局上创建的AutoCompleteTextView 视图开始。用户在字段中输入有效数据后,我正在以相同的方式在第一个对象下方创建一个新的AutoCompleteTextView 对象,具有相同的参数。我将所有字段引用存储在ArrayList 中以跟上最后一个,这样我可以确保只有在底部的字段下才会有新字段(基本上是引用中的最后一个元素list) - 所以它在每个领域都会继续。

我想添加此功能:创建新字段时,我将最后一个字段的 IME 选项更改为 EditorInfo.IME_ACTION_NEXTnextFocusForward 属性为新创建的字段 - 也以编程方式。我想要实现的目标:当用户在键盘上按下 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“不可见”(技术上GONE) 字段每次)会更痛苦。

还有一件事:在选择任何其他字段并重新选择配置更改的字段后回车按钮第一次就可以正常工作!如果我能做到的话同样以编程方式,它会解决我的问题......那么,有什么想法吗? (当然,我也欢迎更好的解决方案......;))

【问题讨论】:

    标签: android autocompletetextview ime


    【解决方案1】:

    几天后,我又开始处理这个问题了。 是的,这是一个解决方案,但是,它不像我想要的那样漂亮。 ..

    无论如何,我创建了这段代码:

    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 只有当我在我的问题中写下它时单击到其他地方。所以我认为我的“解决方案”可以工作,但这不是最好的答案,所以如果你有其他想法,请随时写下你的想法...... :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2017-04-08
      • 1970-01-01
      • 2013-09-12
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多