2012-02-23 4 views
5

listViewEditText 상자를 사용하고 어댑터 getFilter() 기능을 사용하여 필터링하고 싶습니다. 그것은 텍스트 상자에 공백 문자를 넣을 때까지 잘 작동합니다.안드로이드 필터 ListView - 공백 문자

편집 : 내 목록이 단어가 포함 된 경우 그것은 SimpleAdapter가

를 ArrayAdapter와 아니다 : { "애플", "바나나", "레드 애플"} 나는 "사과"가 모두 반환됩니다 입력하면 Apple이라는 단어가 들어있는 항목 (Apple 및 Red Apple). "apple"을 입력하면 아무 것도 반환하지 않습니다.

아이디어가 있으십니까? 이 사용

searchBox = (EditText) findViewById(R.id.searchBox); 

searchBox.addTextChangedListener(filterTextWatcher); 

private TextWatcher filterTextWatcher = new TextWatcher() { 

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub   
} 

public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    // TODO Auto-generated method stub   
} 

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    myAdapter.getFilter().filter(s.toString()); 
} 
}; 
+0

당신은 이것을 알아 냈습니까? –

+0

미안합니다. 솔루션을 ArrayAdapter 기반으로 자신의 어댑터를 만드는 것일 수도 있지만 생각하지 않았다 (그 프로젝트에서 작업을 중지). – Chris911

+0

@CaptainProg 어떤 유형의 대답을 찾고 계십니까? 'trim()'을 사용하여 제기 된 원래의 질문은 최선의 대답입니다. – Sam

답변

2

, 당신은을 오버라이드 (override) 할 필요가 있습니다 SimpleAdapter 및 자신의 필터링 요구 사항을 구현합니다.

SimpleAdapter의 필터는 많은 개인용 개체를 사용하므로 복제해야하므로 많은 코드가 필요합니다. ArrayAdapter

Fortunatly, 다른 사람 (@ uʍop ǝpısdn)은 이미 프로세스에 가서 코드를 작성하여 커뮤니티에서 사용할 수 있도록했습니다.

예를 사용하는 방법과 here의 코드를 포함하여 블로그 here에 대한 링크를 찾을 수 있습니다.

감사합니다.

+0

이것이 유일한 해결책이라고 생각합니다. 이 질문을 한 지 얼마되지 않아 더 이상 그 프로젝트를 진행하지 않고 있지만 검증을 시도 할 것입니다. 감사. – Chris911

+0

정확히. 설명 된 문제는 다음 줄로 인해 발생합니다 : 'String [] words = str.split ("");'** SimpleAdapter.SimpleFilter ** 클래스는 초기 문자열의 공백을 단순히 생략하고 단어로 분리합니다. –

+0

@ 루이스 비슷한 문제가 있고 http : // stackoverflow라는 질문을 게시했습니다.com/questions/39573432/get-filter-does-not-work-for-in-android 나는 당신이 도울 수 있기를 바랍니다. – AndroidNewBee

2

시도 : 다음은 코드의 SimpleAdapter에서 필터링 기능은 필터링 요구 사항을 충족하지 않는 경우

myAdapter.getFilter().filter(s.toString().trim()); 
+0

공백을 제거하기 때문에 부분적으로 만 작동하지만 "Red Ap"를 입력하면 "RedAp"로 트리밍되고 "RedAp"가 포함 된 단어는 선택되지 않습니다. 그래서 근본적으로 단어 앞뒤에 하나의 단어를 넣었지만 원하는 결과를주지 않는다면 문제가 해결됩니다. – Chris911

+2

@ Chris911 : 실제로는 트리밍하지 않습니다. 단순히 텍스트 앞뒤에 공백을 제거하고 각각을 중지합니다. "apple"을 입력하면 "apple"이되지만 " 빨간 ap ", it it it로 가져갈 것입니다. 요점 은요? – Hiral

+0

Hiral에 대한 설명 주셔서 감사하지만 여전히 문제를 해결하지 못합니다. 이 작업을 수행하는 유일한 방법은 자체 필터를 사용하여 자체 어댑터를 구현하는 것입니다. – Chris911