AutoCompleteTextView与电子邮件域android

时间:2014-03-02 20:22:04

标签: android autocompletetextview

所以我的应用程序中有一个autocompletetextview字段,我希望用户输入他的电子邮件地址。现在,为了帮助他更快地输入并且不犯错误,我想在输入时向他推荐最常用的电子邮件域服务器。

我在这个数组中使用该控件

String[] arraymails ={"@gmail.com","@hotmail.com","@yahoo.com","@outlook.com"};  

并在oncreate中

mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arraymails);  
mEmailView.setAdapter(adapter);

这个想法是,当用户键入“@”字符然后“g”时,它会建议@ gmail.com。

如果我直接在文本框中输入“@g ..”,这样可以正常工作,但如果我之前输入任何内容,例如“john @ gm”,它将无效。

是否有任何通配符,如“*@gmail.com”这样做?或者我应该如何实施呢?

由于

2 个答案:

答案 0 :(得分:15)

几天后到处寻找解决方案,找不到它。 我发布它是因为它可能对某人有帮助。

通过反复试验和调查几个网站和指南,我可以找到我正在寻找的解决方案。

这是解决方案的图像:

文本框,你可以输入你想要的任何东西,约翰就是一个例子。

Image 1

只需输入“@”即可获得所有可能域名列表

Image 2

您可以通过开始输入域名

来过滤一下

Image 3

代码:

CustomFilterAdapter类

public class CustomFilterAdapter extends ArrayAdapter<String> {
    private final String MY_DEBUG_TAG = "CustomFilterAdapter";
    private ArrayList<String> items;
    private ArrayList<String> itemsAll;
    private ArrayList<String> suggestions;
    private int viewResourceId;

public CustomFilterAdapter(Context context, int viewResourceId, ArrayList<String> items) {
    super(context, viewResourceId, items);
    this.items = items;
    this.itemsAll = (ArrayList<String>) items.clone();
    this.suggestions = new ArrayList<String>();
    this.viewResourceId = viewResourceId;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(viewResourceId, null);
    }
    String customer = items.get(position);
    if (customer != null) {
        TextView customerNameLabel = (TextView)v;
        if (customerNameLabel != null) {
            customerNameLabel.setText(customer);
        }
    }
    return v;
}

@Override
public Filter getFilter() {
    return nameFilter;
}

Filter nameFilter = new Filter() {
    public String convertResultToString(Object resultValue) {
        String str = (String)resultValue; 
        return str;
    }
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        if (constraint != null){
        String palabra = constraint.toString();
        if(palabra != null && palabra.indexOf("@") != -1) {
            String palabra2 = palabra.substring(palabra.indexOf("@"));
            String antesArroba;
            try{
                antesArroba = palabra.substring(0, palabra.indexOf("@"));
            }catch (Exception ex)
            {
                antesArroba ="";
            }
            suggestions.clear();
            for (String customer : itemsAll) {
                if(customer.toLowerCase().startsWith(palabra2.toString().toLowerCase())){
                    suggestions.add(antesArroba+customer);
                }
            }
            FilterResults filterResults = new FilterResults();
            filterResults.values = suggestions;
            filterResults.count = suggestions.size();
            return filterResults;
        } else {
            return new FilterResults();
        }
        }else {
            return new FilterResults();
        }
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        ArrayList<String> filteredList = (ArrayList<String>) results.values;
        if(results != null && results.count > 0) {
            clear();
            for (String c : filteredList) {
                add(c);
            }
            notifyDataSetChanged();
        }
    }
};

}

关于onCreate的活动(你可以在这里添加你想要的任何东西)

arraymails = new ArrayList();
arraymails.add("@gmail.com");
arraymails.add("@hotmail.com");
arraymails.add("@yahoo.com");
arraymails.add("@outlook.com");
arraymails.add("@adinet.com.uy");

mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
mEmailView.setText(mEmail);
CustomFilterAdapter adapter = new CustomFilterAdapter(this,android.R.layout.simple_list_item_1,arraymails); 

就是这样。

祝你好运!

答案 1 :(得分:0)

我认为您必须通过扩展BaseAdapter来创建自己的适配器,并且在getView方法中,您必须在那里创建自己的逻辑

Example Link