AutoCompleteTextView с доменами электронной почты android
Таким образом, у меня есть поле autocompletetextview в моем приложении, которое я хочу, чтобы пользователь ввел свой адрес электронной почты. Теперь, чтобы помочь ему печатать быстрее и не делать ошибок, я хочу предложить ему большинство серверов доменов электронной почты commons при вводе.
Я использую этот элемент управления с этим массивом
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 ответа:
После нескольких дней и поисков повсюду решения, не смог найти его. Я публикую его, потому что это может кому-то помочь.
Методом проб и ошибок, исследовав несколько сайтов и путеводителей, я смог найти решение, которое искал.Это изображения того, как выглядит решение:
Текстовое поле, вы можете ввести все, что хотите, Джон является примером.
Просто набрав "@", вы получите список всех возможных вариантов. Домены
И вы можете отфильтровать немного больше, начав вводить доменное имя
Код:
Класс 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);
И это все.
Удачи!