Android edittext - выберите телефонный номер контакта (с автозаполнением) - PullRequest
4 голосов
/ 18 января 2011

Есть ли способ добавить элемент EditText, в котором я мог бы выбрать номер телефона контакта из моего списка контактов. Так же, как в общем приложении для Android. (Автозаполнение при наборе номера телефона или имени контакта!).

Ответы [ 2 ]

8 голосов
/ 19 января 2011

Вы ознакомились с примером Android Auto Complete по адресу: http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

возможно, вы можете настроить этот пример, чтобы добавить свой список контактов.

2 голосов
/ 05 февраля 2011

Хороший ответ Хакана, но он связан с использованием Курсора.В общем, вы можете написать свой собственный adpater, например, расширив ArrayAdapter.В моем приложении Адаптер должен был сделать много «странных вещей», таких как поиск в БД, затем повторно отфильтровать курсоры, добавить другие результаты, изменить другие ... Я сделал что-то вроде этого:

public class MyAdapter extends ArrayAdapter {
  private List<String> mObjects; //the "strange Strings"
  private MyHelper dbHelper; // an helper to make query
  private MyFilter mFilter; // my personal filter: this is very important!!
  private final Object mLock=new Object();


  //functions very similar to the ArrayAdapter implementation
@Override
public int getCount() {
return mObjects.size();
}

@Override
public Filter getFilter() {
if (mFilter==null) {
    mFilter=new TeamFilter();
}
return mFilter;
}

@Override
public String getItem(int position) {
return mObjects.get(position);
}

@Override
public int getPosition(String item) {
return mObjects.indexOf(item);
}

  //the trick is here!
  private class MyFilter extends Filter {
    //"constraint" is the string written by the user!
@Override
protected FilterResults performFiltering(CharSequence constraint) {
    FilterResults results=new FilterResults();
        //no constraint => nothing to return
    if ((constraint==null)||(constraint.length()==0)) {
    synchronized (mLock) {
        ArrayList<String> list=new ArrayList<String>();
        results.values=list;
        results.count=list.size();
    }
    }
    else {
    String constr=constraint.toString();

    mObjects= // do what you want to do to populate you suggestion - list
            //( I call the db and change some values)
    results.values=mObjects;
    results.count=mObjects.size();
    }
    return results;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
    if (results.count>0) {
    notifyDataSetChanged();
    }
    else {
    notifyDataSetInvalidated();
    }
}
  }
}
...