android - AutoCompleteTextView 只允许建议的选项

标签 android autocompletetextview android-dialogfragment dialogfragment

我有一个 DialogFragment,其中包含 AutoCompleteTextViewCancelOK 按钮。

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

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

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

欢迎提出任何建议。 谢谢

最佳答案

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

我添加了这个焦点变化监听器

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 View 仍处于焦点状态,则会再次进行错误检查。

关于android - AutoCompleteTextView 只允许建议的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18467012/

相关文章:

android - 从 DialogFragment 回调 fragment

java - 骰子模拟 - 循环中的 onClickListener

java - 使用来自 Parse.com 的数据填充 String[] 数组 (Android)

Android AutoCompleteTextView 下拉位置

Android - AutoCompleteTextView 在调用 setText 后不显示

android - 打开 dialogfragment 后不要失去对后台 Activity 的关注

android - 使用 Retrofit 2.0 Android 进行多部分请求 为什么我看不到里面的多部分?

android - ImageView in LinearLayout in Scrollview with CardStackView and Picasso 图片不显示

android - 我收到 gradle 错误任务执行失败

android - 如何防止 DialogFragment 在 Activity 恢复时被解散