2012-07-20 7 views
1

xml에서 약 20,000 개의 문자열을로드 중이다. 그 외에도 입력 할 때 응용 프로그램이 실제로 나를 제안 할 때까지는 매우 많은 시간이 걸린다. Cra 그것은 내게 첫 번째 제안 인 Valea Crabului을 보여준다. 문자열에 Craiova이 있지만 나중에 제안됩니다.autocompletetextview가 내가 원하는 것을 제안하지 않는다

AutoCompleteTextView은 전체 단어와 일치하는 단어 만 나에게 제안 할 수 있습니까?

+2

사용자 정의 필터를 사용하고 있습니까? 몇 가지 코드를 게시 할 수 있습니까? –

+0

@OvidiuLatcu 하나를 구현해야 사용자 정의 필터를 사용하지 않습니까? – opc0de

+0

당신은 "Cra"입력에 대해 Craiova가 제안되지 않았습니까? 추천 목록에서 아래로 스크롤해도? 어쩌면 배열의 크기가 문제가 될 수 있습니다. – cosmincalistru

답변

3

당신이 내부 클래스 ArrayAdapterArrayFilter에서 ArrayAdapterhttps://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java

에 대한 필터의 기본 구현을 볼 수 있습니다 여기보다 당신이 당신의 AutoCompleteTextView에 대한 ArrayAdapter를 사용하는 경우 : 당신은 필터 '아무튼 볼

for (int i = 0; i < count; i++) { 
       final T value = values.get(i); 
       final String valueText = value.toString().toLowerCase(); 

       // First match against the whole, non-splitted value 
       if (valueText.startsWith(prefixString)) { 
        newValues.add(value); 
       } else { 
        final String[] words = valueText.split(" "); 
        final int wordCount = words.length; 

        // Start at index 0, in case valueText starts with space(s) 
        for (int k = 0; k < wordCount; k++) { 
         if (words[k].startsWith(prefixString)) { 
          newValues.add(value); 
          break; 
         } 
        } 
       } 
      } 

원하는 항목과 일치하는 항목을 정렬하려면 어댑터 용 필터를 직접 작성해야합니다.

대신

   // First match against the whole, non-splitted value 
       if (valueText.startsWith(prefixString)) { 
        newValues.add(value); 
       } else { 

는 그렇게 필터가 가장 관련성이 필터의 결과로 결과의 상단에 귀하의 제안 문자열로 시작하는 값을 추가합니다

   // First match against the whole, non-splitted value 
       if (valueText.startsWith(prefixString)) { 
        newValues.add(0, value); 
       } else { 

을 사용해야 할 수도 있습니다.

관련 문제