7

我有一个DialogFragment包含AutoCompleteTextViewCancelOK按钮。AutoCompleteTextView只允许建议的选项

AutoCompleteTextView是给我是从服务器获取用户名的建议。

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

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

欢迎任何建议。 谢谢

+0

使用微调,而不是... – Selvin

+1

@Selvin因为有用户名的很多,而且客户希望有自动完成的TextView我不能使用微调。感谢您的建议 – nikmin

+0

如何使用搜索选项列表视图? –

回答

10

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

我加入这个焦点变化监听

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

+0

是什么'UsersAutoCompleteAdapter'? –

+0

@Wizard这是我使用的AutocompleteTextView我的自定义ListAdapter。这只是适配器的名称。 – nikmin

+0

好的谢谢........... –

相关问题