【问题标题】:Android edittext - choose contact's phone number (with auto completion)Android edittext - 选择联系人的电话号码(自动完成)
【发布时间】:2011-06-11 02:36:52
【问题描述】:

有没有办法放置一个EditText 元素,我可以从我的联系人列表中选择联系人的电话号码。就像在通用的 android 短信应用程序中一样。 (输入电话号码或联系人姓名时自动完成!)。

【问题讨论】:

    标签: android autocomplete contacts android-edittext


    【解决方案1】:

    您是否查看过 Android 的自动完成示例:http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

    也许您可以调整此示例以添加您的联系人列表。

    【讨论】:

      【解决方案2】:

      Hakan 的回答很好,但它与 Cursor 的使用有关。 一般来说,您可以编写自己的适配器,例如通过扩展 ArrayAdapter。 在我的应用程序中,适配器必须做很多“奇怪的事情”,比如在 db 中搜索,然后重新过滤游标,添加其他结果,更改其他... 我做了这样的事情:

      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();
          }
      }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-06-13
        • 1970-01-01
        • 2018-01-08
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多