“上的自动完成文本视图”@&引用;字符型Android

“上的自动完成文本视图”@&引用;字符型Android,android,autocomplete,android-edittext,autocompletetextview,social,Android,Autocomplete,Android Edittext,Autocompletetextview,Social,我有一个社交消息应用程序,我正在创建一个用户名字符串列表,希望edittext在键入消息并键入“@”时显示用户列表 如何执行此操作?您可以添加一个TextWatcher并动态更改自动完成文本视图的适配器。仅更改数组并调用notifyDataSetChanged()似乎不起作用 autoCompleteView.addTextChangedListener(new TextWatcher() { @Override public void be

我有一个社交消息应用程序,我正在创建一个用户名字符串列表,希望edittext在键入消息并键入“@”时显示用户列表


如何执行此操作?

您可以添加一个
TextWatcher
并动态更改
自动完成文本视图的适配器。仅更改数组并调用
notifyDataSetChanged()
似乎不起作用

   autoCompleteView.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                    int occurrences = 0;
                    String enteredString = s.toString();
                    for (char c : enteredString.toCharArray()) {
                        if (c == '@') {
                            occurrences++;
                        }
                    }
                    if (occurrences == 1) {
                        String requiredString = enteredString.substring(0, enteredString.indexOf("@"));
                        email[0] = requiredString + "@gmail.com";
                        email[1] = requiredString + "@hotmail.com";
                         .
                         .
                        email[10] = requiredString + "@yahoo.com";
                        adapter = null;
                        adapter = new ArrayAdapter<>(MyActivity.this, android.R.layout.simple_list_item_1, email);
                        autoCompleteView.showDropDown();
                        autoCompleteView.setThreshold(0);
                        autoCompleteView.setAdapter(adapter );
                    } else if (occurrences == 0) {
                        autoCompleteView.dismissDropDown();
                    }

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
autoCompleteView.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
int=0;
字符串enteredString=s.toString();
for(字符c:enteredString.toCharArray()){
如果(c=='@'){
引用++;
}
}
如果(出现次数==1){
String requiredString=enteredString.substring(0,enteredString.indexOf(“@”);
电子邮件[0]=requiredString+“@gmail.com”;
电子邮件[1]=requiredString+“@hotmail.com”;
.
.
email[10]=requiredString+“@yahoo.com”;
适配器=空;
adapter=new ArrayAdapter(MyActivity.this,android.R.layout.simple\u list\u item\u 1,电子邮件);
autoCompleteView.showDropDown();
自动完成视图。设置阈值(0);
autoCompleteView.setAdapter(适配器);
}else if(出现次数==0){
autoCompleteView.dismissDropDown();
}
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
这用于在输入“@”时显示域列表。您可以根据需要修改代码