Android 에서 기본적으로 제공하고 있는 Adapter는 SimpleAdapter, SimpleCursorAdapter
등과 같이 여러가지가 존재하지만, 만들고자 하는 Application 에 맞도록 List item 모양을 변경해야 할 필요가 있다. 이때 BaseAdapter class를 이용하여 원하는 모양의 List 를 생성할 수 있다.
이전 File Browser 를 만들때 사용한 list adapter code를 예를 들 수 있다.
[ Adapter 생성하기 ]
---------------------------------------------------------------
public static class FileBrowserAdapter extends BaseAdapter {
private LayoutInflater mAdapterInflater;
private List mAdapterList;
// 생성자 (필요에 따라 parameter를 설정할 수 있다.)
public FileBrowserAdapter(Context context, List list) {
mAdapterInflater = LayoutInflater.from(context);
mAdapterList = list;
}
// List count 를 얻기위한 Method 구현
public int getCount() {
return mAdapterList.size();
}
// List item 을 얻기위한 Method 구현
public Object getItem(int position) {
FileItem item = (FileItem)mAdapterList.get(position);
return item;
}
// List item의 id 를 얻기위한 Method 구현
public long getItemId(int position) {
FileItem item = (FileItem)mAdapterList.get(position);
return item.getId();
}
// 화면에 보여지는 List item 의 모양을 setting 하는 Method 구현
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// List 한개의 item 모양을 정의한 xml을 설정한다.
convertView = mAdapterInflater.inflate(R.layout.filebrowser_list, null);
// xml 에 포함된 widget의 instance를 얻는다.
holder = new ViewHolder();
holder.img = (ImageView)convertView.findViewById(R.id.filebrowser_list_img);
holder.foldername = (TextView)convertView.findViewById(R.id.filebrowser_list_txt_foldername);
holder.filename = (CheckedTextView)convertView.findViewById(R.id.filebrowser_list_ck_txt_filename);
} else {
holder = (ViewHolder) convertView.getTag();
}
FileItem item = (FileItem)mAdapterList.get(position);
// xml widget의 속성및 값을 설정한다.
if(item.getIsDir() == true)
{
holder.img.setImageResource(R.drawable.folder1);
// folder visible
holder.foldername.setVisibility(View.VISIBLE);
holder.foldername.setText(item.getName());
// file invisible
holder.filename.setVisibility(View.INVISIBLE);
holder.filename.setText("");
}
else
{
holder.img.setImageResource(R.drawable.file);
// folder invisible
holder.foldername.setVisibility(View.INVISIBLE);
holder.foldername.setText("");
// file visible
holder.filename.setVisibility(View.VISIBLE);
holder.filename.setText(item.getName());
}
convertView.setTag(holder);
return convertView;
}
// xml 의 widget 들에 대한 instance를 얻기위한 view holder
static class ViewHolder {
ImageView img;
TextView foldername;
CheckedTextView filename;
}
}
---------------------------------------------------------------
[ xml 작성하기 ]
[ 생성된 List 모습 ]