반응형
AutoCompleteTextView는 EditText를 상속받아 구현한것으로 자동완성 기능을 제공한다. Adapter를 설정하여 EditText가 타이핑이 일어나면 쿼리된 데이터를 보여준다.
이렇게 타이핑이 일어날때 DB에서 쿼리후 Adapter의 changeCursor()를 하곤 하는데 SimpleCursorAdapter의 FilterQueryProvider를 이용하면 좀 더 간단하게 사용할 수 있다. SimpleCursorAdapter는 내부적으로 EditText의 타이핑을 감지해서 쿼리가 필요한 상황과, 그 쿼리에서 출력해야 될 문자를 구현할 수 있도록 설정 할수 있는 메서드를 지원한다.
아래의 setCursorToStringConverter()는 리스트에 표시될 문자열을 반환하는 것을 구현하면 되고, setFilterQueryProvider는 타이핑으로 문자열이 바뀌었을때 해당 데이터를 새롭게 불러온 Curor를 넘기면 된다.
adapter.setCursorToStringConverter(new CursorToStringConverter() { public String convertToString(android.database.Cursor cursor) { final int columnIndex = cursor.getColumnIndexOrThrow("title"); final String str = cursor.getString(columnIndex); return str; } }); adapter.setFilterQueryProvider(new FilterQueryProvider() { public Cursor runQuery(CharSequence constraint) { Cursor cursor = mDb.getDbLists(constraint); return cursor; } });
이렇게 메서드도 지원하며, SimpleCursorAdapter에서 implements를 통해서 FilterQueryProvider를 구현해서 사용해도 무관하다. 또한 FilterQueryProvider는 백그라운드를 통해서 쿼리가 실행되기 때문에 직접 changeCursor()를 써서 메인쓰레드 쿼리되는것 보다 성능면에서 훨씬 유리하다.
반응형
'안드로이드 개발' 카테고리의 다른 글
외부이미지 나인패치 적용하기 (1) | 2014.04.12 |
---|---|
DB Query를 별도의 Thread로 처리하기 (0) | 2014.01.22 |
Android OutOfMemory 분석 (0) | 2014.01.14 |