2012-01-02 4 views
1

私はアンドロイドアプリのためにいくつかの連絡先オートコンプリートとオートサーチアルゴリズムを持っています。テキストビューAndroid TextViewのオートコンプリートとオートサーチ

AutoCompleteTextView recip = 
     (AutoCompleteTextView) findViewById(R.id.recipientBody); 

ArrayAdapter<String> adapter = 
new ArrayAdapter<String>(this, R.layout.list_item, getAllContacts()); 
     recip.setAdapter(adapter); 

そして今、入力に一致する連絡先を検索し、実際のアルゴリズム

<AutoCompleteTextView 
     a:id="@+id/recipientBody" 
     a:layout_width="0dip" 
     a:layout_height="wrap_content" 
     a:layout_weight="1.0" 
     a:nextFocusRight="@+id/smsRecipientButton" 
     a:hint="@string/sms_to_whom" 
     a:maxLines="10" 
     /> 

そして今、私のセットアップ:

いくつかの入力のためのテキストビューを定義するXML ファースト

これは、連絡先番号と名前入力の両方で問題なく動作します。しかし、まだ問題があります。ユーザは、複数の電話番号を入力することができる。しかし、テキストビューに1つの連絡先が適用されると、アルゴリズムは文字列全体を取り込むため、再度検索することはできません。

どうすれば解決できますか?

答えて

1

EDIT:

まあ、私はしばらくの間、それについて考え、私の解決策の問題を発見 - あなたがのTextViewに補完リストから連絡先を挿入することができない場所ではありません。

解決策はMultiAutoCompleteTextViewのようですが、この問題はあなたの問題を解決するために設計されています。

ご迷惑をおかけして申し訳ありません。


私にとっては、カスタムアダプターが必要なようです。

あなたはArrayAdapter<String>を拡張し、getFilter()を実装することができる - もちろん、あなたはまた、あなたがそのメソッドから返されるインスタンス(Filterを拡張する)カスタムフィルタが必要になります。

フィルタのperformFilteringメソッドには、1つのパラメータ、つまり提案のリストが必要な文字列があります。最後のカンマ(またはセパレータとして使用している文字)の後にその部分を取り、その部分文字列の候補リストを返す必要があります。

P.S.

優れたユーザーエクスペリエンスのために、AutoCompleteTextViewのコンテンツをスパンでスタイリングすることも考えられます。http://ballardhack.wordpress.com/2011/07/25/customizing-the-android-edittext-behavior-with-spans/