AutoCompleteTextView只允许build议的选项

我有一个DialogFragment包含AutoCompleteTextView ,并CancelOKbutton。

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

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

我知道我可以检查用户是否存在,当用户点击OK ,但有其他方式,让我们说不允许用户input字符,如果不存在这样的用户名。 我不知道如何做到这一点,因为每input一个字符,我只能得到5个build议。 服务器是这样实现的。

任何build议都欢迎。 谢谢

Solutions Collecting From Web of "AutoCompleteTextView只允许build议的选项"

我无法find更合适的解决scheme,那么这个:

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

 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()方法返回包含build议的ArrayList

所以,当我input一个用户名,然后移动到另一个字段,这个监听器被触发,它会检查build议列表是不是空的,如果input的用户名是在列表中。 如果条件不满足,则显示错误。

我也有同样的检查OKbutton点击:

 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视图仍然集中,错误检查再次完成。