2011-01-18 3 views
4

EditTextの要素を入力する方法はありますか?連絡先の電話番号を連絡先リストから選択できますか?ちょうど一般的なアンドロイドのSMSアプリのように。 (電話番号や連絡先の名前を入力すると自動的に完了!)。多分あなたは、あなたの連絡先リストを追加するには、この例を微調整することができhttp://developer.android.com/resources/tutorials/views/hello-autocomplete.htmlAndroid edittext - 連絡先の電話番号を選択します(自動補完付き)

答えて

8

はあなたにAndroidのオートコンプリートの例をチェックアウトしました。

2

ハカンさんの答えは良いですが、カーソルの使用に関係しています。 一般に、ArrayAdapterを拡張するなどして、独自のadpaterを記述することができます。私のアプリケーションでは、アダプターは、デシベルで再度フィルタリングカーソルの検索のような「奇妙な」の多くを行う他の結果を追加し、他を変更しなければならなかった ... 私はこのようなものでした:

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(); 
    } 
} 
    } 
} 
関連する問題