2016-11-07 3 views
0

Android Tier 검색기 또는 TrueCaller 전화 걸기와 같은 T9 검색을 구현하고 싶습니다. 내가 지금까지 달성 한 것은 : - "ABC", "교류", "캘리포니아를"그래서 Android T9 검색 연락처 (스마트 다이얼러)

에 지금은 제작 -

는 것 그것은 나를 준다 내가 전화 걸기에 2를 누르면 같은 문자열 패턴에 키 입력을 변환 검색어

문자열 선택 = Utility.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; 
}' 

는에 문자열의 ArrayList를 변환 where 절

곳 DISPLAY_NAME처럼 '순이 %'OR 등 DISPLAY_NAME 'ABC %'LIKE 및 ......

잘이

저를 제안하는 방법하시기 바랍니다 ..... 인해 복잡한 쿼리 나에게 비효율적 인 결과 및 응용 프로그램 충돌을 제공 내 키 입력처럼 일치하는 쿼리를 수행하거나 ContactsProvider에서 다른 방법으로 스마트 검색을 수행 할 수 있습니까?

답변

2

각 숫자 키를 눌러 목록을 새로 고치려면이 기술이 작동하지 않습니다. 천천히 가라.

더 나은 옵션은 이름을 읽는 것이 바람직 동안 Contacts DB에서 모든 연락처 이름을 읽고, 간단한 ArrayList<String> 또는 유사한 수집에 저장하는 것입니다 그들 toLowerCase() 다음 단계에서 검색을 쉽게하기 위해 변환합니다.

다음을 누르면 각 숫자, 예를 들어, 입력 된 자리에서 regular expression pattern를 구축 "234", 패턴을 구축 한 후 패턴 .*[abc][def][ghi].*

로 변환 이름 목록을 반복하고 일치하는 이름을 반환 무늬.

+0

감사합니다. 형제 님, 제 하루를 만듭니다. – user3037028