我有一个DialogFragment
包含AutoCompleteTextView
, 和Cancel
和OK
按钮。
这AutoCompleteTextView
是给出我从服务器获得的用户名的建议。
我想要做的是限制用户只能输入现有的用户名。
我知道我可以在用户单击时检查该用户名是否存在OK
,但是还有其他方法吗,假设如果不存在这样的用户名,则不允许用户输入字符。我不知道该怎么做,因为在每个输入的字符上我最多只能得到 5 条建议。服务器就是这样实现的。
欢迎任何建议。谢谢
我有一个DialogFragment
包含AutoCompleteTextView
, 和Cancel
和OK
按钮。
这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
视图仍然聚焦,则再次进行错误检查。