2016-11-07 2 views
0

アンドロイドネイティブダイヤラやTrueCallerダイヤラのようなT9検索を実装したいと思います。私は今までに達成したことである: - 「CA」「ABC」「交流」などAndroid T9検索連絡先(スマートダイヤラ)

に今、私が作った - 私はダイヤラに2を押すと、それは希望を私に与えますよう

は、文字列パターンにキーストロークを変換しますクエリ

文字列選択=ユーティリティ.getSelectionLikeWithIn(mmemonics);

Cursor query = getContentResolver()。query(ContactsContracts.Contacts.CONTENT_URI、null、selection、null、null); '方法上記

パブリック静的な文字列getSelectionLikeWithIn(リストmmemonics){

String selection = ""; 
    for (int i = 0; i < mmemonics.size(); i++) { 
     selection = selection + " display_name LIKE '"; 
     selection = selection + mmemonics.get(i); 

     if (i == mmemonics.size() - 1){ 
      selection = selection + "%'"; 


     }else { 
      selection = selection + "%' OR"; 
     } 
    } 
    return selection; 
}' 

where句

ここDISPLAY_NAME同様 'ABの%' OR DISPLAY_NAME LIKE 'ABCの%' 等に文字列のArrayListの変換......

だけでなく、これは.....による複雑なクエリに私に

を非効率的な結果とアプリのクラッシュを与えるどのように私を提案してください。このようなスマート検索を実行するために、私のキーストロークやその他の方法でContactProviderのように照合することはできますか?

答えて

2

各桁のリストを更新する場合、このテクニックは機能しませんゆっくりとしてください。

より良いオプションは、名前を読んで、好ましくながら、Contacts DBからすべて連絡先の名前を読んで、そしてシンプルArrayList<String>または類似のコレクションに保存することです彼らはtoLowerCase()次のステップでは、検索を容易にするために変換します。

次に、押された各桁のために、例えば、入力された数字からregular expression patternを構築する「234」は、パターンを構築した後、パターン.*[abc][def][ghi].*

に変換する名前のリストを反復と一致する名前を返しますパターン。

+0

ありがとう、私の一日を作る – user3037028

関連する問題