본문으로 바로가기

Cursor Adapter#3 - Resource Cursor Adatper

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

ResourceCursorAdatper는 원하는 layout.xml과 연결할 때 사용한다.

앞에서 설명한 Cursor Adapter와의 다른점은 아래와 같다.

1. Constructor의 매개 변수로 xml layout을 넣는다.

2. newView()에서 inflate하지 않는다. (이미 inflate되어 bindView()로 넘어온다.)


아래 예제는 contcctBadge에 resourceCursorAdapter를 이용하여 cursor의 자료를 붙이는 예제이다.

public class ContactsQuery extends ListActivity {
   static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
           Contacts._ID, // 0
           Contacts.DISPLAY_NAME, // 1
           Contacts.STARRED, // 2
           Contacts.TIMES_CONTACTED, // 3
           Contacts.CONTACT_PRESENCE, // 4
           Contacts.PHOTO_ID, // 5
           Contacts.LOOKUP_KEY, // 6
           Contacts.HAS_PHONE_NUMBER, // 7
   };

   static final int SUMMARY_ID_COLUMN_INDEX = 0;
   static final int SUMMARY_NAME_COLUMN_INDEX = 1;
   static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
   static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
   static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
   static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
   static final int SUMMARY_LOOKUP_KEY = 6;
   static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
               + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
               + Contacts.DISPLAY_NAME + " != '' ))";
       Cursor c = getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION,
               select, null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
       
       ContactListAdapter adapter = new ContactListAdapter(this, R.layout.main, c,
                                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

       setListAdapter(adapter);
   }

   private final class ContactListAdapter extends ResourceCursorAdapter {     
       
       public ContactListAdapter(Context context, int layout, Cursor c, int flags ) {
    	    super(context, layout, c, flags);
       }

       @Override
       public View newView(Context context, Cursor cursor, ViewGroup parent) {
    	   return super.newView(context, cursor, parent);
       } 
       
       @Override
       public void bindView(View view, Context context, Cursor cursor) {
            TextView nameView = (TextView) view.findViewById(R.id.name);
            QuickContactBadge photoView = (QuickContactBadge) view.findViewById(R.id.badge);

            nameView.setText(cursor.getString(SUMMARY_NAME_COLUMN_INDEX));
            final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
            final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
            Uri contactUri = Contacts.getLookupUri(contactId, lookupKey);
            photoView.assignContactUri(contactUri);
       } 
   }

추가적으로 아래에 쓰인 xml은 다음과 같다

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:paddingLeft="0dip"
    android:paddingRight="9dip"
    android:layout_height= "wrap_content"
    android:minHeight="48dip">
    <QuickContactBadge android:id="@+id/badge"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="14dip"
        android:layout_marginTop="4dip"
        android:layout_marginBottom="3dip"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_height= "wrap_content"
        android:layout_width= "wrap_content"
        android:src="@drawable/ic_contact_picture"
        style="?android:attr/quickContactBadgeStyleWindowSmall"/>
    <TextView android:id="@+id/name"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:paddingLeft="2dip"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/badge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>


생성자를 이용한 drop down view

resourseCursorAdapter를 이용하여 드롭다운뷰를 생성할 수 도 있다.

그외 android에서 제공하는 API들은 아래 공식 페이지를 확인하면 된다.

https://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html



반응형