본문 바로가기

PROGRAMING/Android

[widget]android.widget.CursorAdapter, ViewHolder pattern

CursorAdapter : 데이터베이스의 data를 리스트에 바인딩 할때 사용한다.

* CursorAdapter는 newView 의 View는 재 사용 한다.

==>ArrayAdapter에서 getView에서 하는 View 재사용 하는 로직이 없다.

ViewHolder pattern을 사용하여 bindView에서 findViewById 함수 사용을 줄인다.


ListView listViewTmp = (ListView)findViewById(R.id.listView1);

Cursor cursor = getMusicDataList();

cursorAdapter = new CursorAdapter(this, cursor) {

@Override

public View newView(Context context, Cursor cursor, ViewGroup parent) {

LOG.i(CLASSNAME,"newView");

ViewHolder viewHolder = new ViewHolder();

LayoutInflater inflater = LayoutInflater.from(context);

View view  = inflater.inflate(R.layout.custom_list_item, parent,false);

viewHolder.tv = (TextView)view.findViewById(R.id.text1);

view.setTag(viewHolder);

return view;

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

LOG.i(CLASSNAME,"bindView");

ViewHolder holder = (ViewHolder) view.getTag();

String id = cursor.getString(cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID));

holder.tv.setText(id);

}

};

listViewTmp.setAdapter(cursorAdapter);

LOG.i(CLASSNAME,"cursorAdapter.getCount() : "+cursorAdapter.getCount());