티스토리 뷰
안드로이드에서는 어댑터라는 객체가 있어서 뷰와 데이타를 연결해준다. 간단하게 문자열 리스트를 리스트뷰에 보여주도록 어댑터를 설정할 수 있다.
기본적으로 제공되는 어댑터 외에 내 입맛에 맞는 어댑터를 정의하여 리스트 뷰에 보여주고자 한다.
기본적으로 제공되는 어댑터 외에 내 입맛에 맞는 어댑터를 정의하여 리스트 뷰에 보여주고자 한다.
- 커스텀 항목 뷰 그리기
- 커스텀 어댑터 클래스 구현
커스텀 항목 뷰 그리기
커스텀 레이아웃을 XML로 디자인한다.
커스텀 어댑터 클래스 구현
어떤 정보를 레이아웃의 어느 위젯에 출력할지 지정하는 역할은 어댑터가 담당한다.
BaseAdapter를 상속받아 추상 메서드를 재정의 한다.
public class MyAdapter extends BaseAdapter { static final String TAG = "SheduleListAdapter"; private Context context; private ArrayListitems; LayoutInflater layoutInflater ; int layout; public MyAdapter(Context context, int layout, ArrayList items) { this.context = context; this.items = items; layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.layout = layout ; } @Override public int getCount() { return items.size(); } @Override public MyDBHelper.MyItem getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { MyDBHelper.MyItem item = getItem(position); if(convertView==null){ convertView = layoutInflater.inflate(layout, parent, false); } TextView id = (TextView)convertView.findViewById(R.id.s11_id); TextView date = (TextView)convertView.findViewById(R.id.s11_date); TextView content = (TextView)convertView.findViewById(R.id.s11_content); id.setText(item._id); date.setText(item.f1); content.setText(item.f0); return convertView; } }
getCount 메서드로 어댑터에 몇 개의 항목이 있는 지 조사한 후 항목수 만큼 getView를 요청한다.
@Override public int getCount() { return items.size(); }
리스트뷰는 각 항목을 출력할 때마다 어댑터의 getView 메서드를 호출하여 뷰를 요청하며 리턴된 뷰를 리스트 뷰의 해당 위치에 배치한다.
View getView(int position, View convertView, ViewGroup parent)
- position 생성할 항목의 순서값
- convertView 이전에 생성된 차일드 뷰
최초 호출시에는 null이 전달되며 이때 커스텀 뷰를 생성하여 리턴한다. 두번째 호출시부터는 이미 생성된 뷰가 전달된다.
- parent 생성되는 뷰의 부모(즉 리스트뷰)
@Override public View getView(int position, View convertView, ViewGroup parent) { MyDBHelper.MyItem item = getItem(position); if(convertView==null){ convertView = layoutInflater.inflate(layout, parent, false); } TextView id = (TextView)convertView.findViewById(R.id.s11_id); TextView date = (TextView)convertView.findViewById(R.id.s11_date); TextView content = (TextView)convertView.findViewById(R.id.s11_content); id.setText(item._id); date.setText(item.f1); content.setText(item.f0); return convertView; }
참고자료
댓글