AutoCompleteTextView仅允许建议的选项

时间:2013-08-27 13:35:09

标签: android autocompletetextview android-dialogfragment dialogfragment

我的DialogFragment包含AutoCompleteTextView,以及CancelOK按钮。

AutoCompleteTextView提供了我从服务器获取的用户名的建议。

我想要做的是限制用户只能输入现有的用户名。

我知道当用户点击OK时我可以检查该用户名是否存在,但是还有其他方式,假设如果不存在此类用户名,则不允许用户输入字符。我不知道该怎么做,因为在每个输入的角色上我只得到5个建议。服务器以这种方式实现。

欢迎任何建议。 谢谢

1 个答案:

答案 0 :(得分:14)

我找不到更合适的解决方案:

我添加了这个焦点更改监听器

actName.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                ArrayList<String> results =
                        ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems();
                if (results.size() == 0 ||
                        results.indexOf(actName.getText().toString()) == -1) {
                    actName.setError("Invalid username.");
                };
            }
        }
});

方法getAllItems()返回包含建议的ArrayList

因此,当我输入一些用户名,然后移动到另一个字段时,将触发此侦听器,并检查建议列表是否为空以及输入的用户名是否在该列表中。如果不满足条件,则显示错误。

此外,我在OK按钮上点击了同样的检查:

private boolean checkErrors() {

    ArrayList<String> usernameResults =
            ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems();

    if (actName.getText().toString().isEmpty()) {
        actName.setError("Please enter a username.");
        return true;
    } else if (usernameResults.size() == 0 || usernameResults.indexOf(actName.getText().toString()) == -1) {
        actName.setError("Invalid username.");
        return true;
    }

    return false;
}

因此,如果仍然关注AutoComplete视图,则会再次进行错误检查。