본문으로 바로가기

Cursor Adapter#1 - Simple cursor adapter

category 개발이야기/Android 2017. 10. 19. 01:00
반응형

Cursor Adapter

cursor adapter는 커서로 읽은 정보를 list로 만들어 주는 역할을 한다.

따라서 DB에서 읽은 정보를 listview 형태로 보여줄때 사용한다.


Simple Cursor Adapter

cursor adatper중에 가장 간단한 adapter 이다.
Simple cursor adatper는 cursor에 있는 정보를 textView나 imageView로 보여줄때 사용한다.
생성자는 아래와 같이 만들 수 있다.

- from: column의 배열

- to: column과 mapping될 layout의 view id


Example

간단하게 contact의 정보를 받아 list로 보여주는 예제는 아래와 같다

import android.provider.ContactsContract.CommonDataKinds.Phone;

public class HelloSimpleCursorAdapter extends ListActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Cursor c = getPhoneInfoFromDB;
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                    android.R.layout.simple_list_item_2, c,
                    new String[] { Phone.TYPE, Phone.NUMBER },
                    new int[] { android.R.id.text1, android.R.id.text2 },
                    CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        }
        
        //읽은 정보를 뷰에 보여줄때 가공하여 보여준다.	
        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
            @Override
            public boolean setViewValue(View view, Cursor cursor, int colIndex) {
                //type coulmn인지 확인
                int phoneTypeIndex = cursor.getColumnIndex(Phone.TYPE);
                if (colIndex == phoneTypeIndex) {
                    int type = cursor.getInt(phoneTypeIndex);
                    String label = null;
                    //custom type이면 label을 읽음
                    if (type == Phone.TYPE_CUSTOM) {
                        label = cursor.getString(cursor.getColumnIndex(Phone.LABEL));
                    } else {
                    //일반 type이면 라벨을 text로 구함
                        label = (String)Phone.getTypeLabel(getResources(),
                                   type, null);
                    }
                    ((TextView) view).setText(text);
                    return true;
                }                
                return false;
            }
        });
        
        setListAdapter(adapter);
    }

    //phone 정보를 DB에서 읽어온다.
    public Cursor getPhoneInfoFromDB() {
        String[] projection = new String[] {Phone._ID, Phone.TYPE, Phone.LABEL, Phone.NUMBER};

        Cursor c = getContentResolver().query(Phone.CONTENT_URI,
                PHONE_PROJECTION, null, null, null);
    };    
}


setViewBinder()는 보여줄 view의 정보를 가공하는 역할을 한다.

위 예제에서는 phone의 type을 (int) view에서 string으로 교체하여 보여준다.


반응형