2016-11-07 64 views
0

我想實現T9搜索,如android原生撥號程序或TrueCaller撥號程序。我已經實現至今是: -Android T9搜索聯繫人(智能撥號器)

轉換擊鍵串模式一樣,如果我按2撥號它會帶給我 - 「ABC」,「交流」,「CA」等

現在,我做了一個查詢

String selection = Utility.getSelectionLikeWithIn(mmemonics);

Cursor query = getContentResolver()。query(ContactsContract.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; 
}' 

上述方法轉換字符串的ArrayList的where子句

其中DISPLAY_NAME像 'AB%' OR DISPLAY_NAME LIKE 'ABC%' 等......

以及這給我的低效結果和應用程序崩潰是由於複雜的查詢.....

請建議我如何我可以執行查詢來匹配像我的按鍵或os他們的任何其他方式在ContactsProvider執行此類智能搜索

回答

2

如果您要刷新每個數字的列表按此技術將無法正常工作,因爲它會太慢了。

更好的選擇是讀Contacts數據庫中的所有聯繫人姓名,並將其存儲在一個簡單的ArrayList<String>或類似的收集,最好是一邊看名字將它們轉換toLowerCase()使在下一步搜索更容易。

接下來,每個按下的數字,建立從輸入數字的regular expression pattern,例如「234」將轉換爲模式.*[abc][def][ghi].*

建設模式後,通過名稱列表進行迭代,並返回匹配的名稱模式。

+0

非常感謝兄弟,你讓我的一天 – user3037028