티스토리 뷰

안드로이드에서는 어댑터라는 객체가 있어서 뷰와 데이타를 연결해준다. 간단하게 문자열 리스트를 리스트뷰에 보여주도록 어댑터를 설정할 수 있다.
기본적으로 제공되는 어댑터 외에 내 입맛에 맞는 어댑터를 정의하여 리스트 뷰에 보여주고자 한다.
  • 커스텀 항목 뷰 그리기
  • 커스텀 어댑터 클래스 구현

커스텀 항목 뷰 그리기

커스텀 레이아웃을 XML로 디자인한다.

    
        
        
        	
    
    

커스텀 어댑터 클래스 구현

어떤 정보를 레이아웃의 어느 위젯에 출력할지 지정하는 역할은 어댑터가 담당한다.

BaseAdapter를 상속받아 추상 메서드를 재정의 한다.

public class MyAdapter extends BaseAdapter {
	static final String TAG = "SheduleListAdapter"; 	 
	private Context context;
	private ArrayList items;
	
	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;
	}
댓글