AutoCompleteTextView에서 FilterQueryProvider를 이용한 DB쿼리



AutoCompleteTextView는 EditText를 상속받아 구현한것으로 자동완성 기능을 제공한다. Adapter를 설정하여 EditText가 타이핑이 일어나면 쿼리된 데이터를 보여준다. 

이렇게 타이핑이 일어날때 DB에서 쿼리후 Adapter의 changeCursor()를 하곤 하는데 SimpleCursorAdapter의 <span “=””>FilterQueryProvider를 이용하면 좀 더 간단하게 사용할 수 있다. SimpleCursorAdapter는 내부적으로 EditText의 타이핑을 감지해서 쿼리가 필요한 상황과, 그 쿼리에서 출력해야 될 문자를 구현할 수 있도록 설정 할수 있는 메서드를 지원한다.

<span “=””>

아래의 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를 구현해서 사용해도 무관하다. 또한 <span “=””>FilterQueryProvider는 백그라운드를 통해서 쿼리가 실행되기 때문에 직접 changeCursor()를 써서 메인쓰레드 쿼리되는것 보다 성능면에서 훨씬 유리하다.

<span “=””>

<span “=””> 




안드로이드 앱 개발자가 제안하는 디자인 방법론 – 2. 나인패치(Nine-patch) 실습

안드로이드 앱 개발자가 제안하는 디자인 방법론 – 2. 나인패치(Nine-patch) 실습

안드로이드 나인패치에 대한 두번째 시간으로 나인패치를 개발자가 어떻게 레이아웃을 잡아서 사용 하는지에 대해 알아보겠다.

나인패치에 대해 기억이 안난다면 이전 글을 다시 보고 이 글을 보도록 하자.

2013/02/28 – [개발관련/Android] – 안드로이드 앱 개발자가 제안하는 디자인 방법론 – 1. 나인패치(Nine-patch) 개념

 

저번 시간 마지막중에 4가지의 나인패치 이미지 예제를 주었다. 대표적으로 쓰이는 이미지로 어떤식으로 적용 되는지 하나하나씩 보자.

 

상단 타이틀이나 내용부분에 그라데이션을 주기 위해서 흔하게 쓰이는 이미지이다.

나인패치를 보면 상단좌측부분은 1px만큼 잡아 주었고, 하단우측부븐은 Full로 나인패치를 잡아 주었다. 

    

<Textview 
android:layout_width="100dip" 
android:layout_height="100dip" 
android:text="Contents" 
android:textcolor="@android:color/black">

위의 이미지는 나인패치를 가로 세로 100dip으로 강제로 늘린 것이다. Padding영역을 모두 잡아 주었기 때문에 앞으로 상단위쪽부분으로 Content 가 붙어 있는것을 볼 수 있다.

    

<Textview 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Contents" 
android:textcolor="@android:color/black">

다음 이미지는 가로 세로 Content 크이게 맞게 늘어 나도록 적용되어 있다. 크기에 맞게끔 늘어 난것을 볼 수있다.  

    
<Textview 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Contents" 
android:textcolor="@android:color/black">

가장 중요한 부분이다. 흔히들 나인패치를 잡을때 하는 실수..

이 부분도 역시 가로세로 Content 사이즈에 맞게 늘어 나도록 적용하였다. 하지만 Content 를 세로로 길게 넣었다.

자세히 보면 가로로 Content 크기에 맞지 않게끔 늘어 난(빨강색 부분) 것을 볼 수 있다. 왜이렇게 되었을까?

정답은 상단 나인패치 부분에 있다. 현재 점으로 하나만 잡고 양 옆으로 영역이 남아 있다. 이 부분이으로 인해 좀 더 늘어 난것이다. 정확하게 맞추기 위해서는 나인패치를 Full로 잡거나 1px로 최대한 작게 변경 하면 된다.