반응형
안녕하세요 돼지왕 왕돼지입니다.
지난 시간에 이어 오늘은 ListView 의 두번째 이야기를 해볼까합니다.
첫번쨰 이야기에서 ListVIew 의 기본에 대해 다루었다면, 오늘은 Custom 한 측면과 변형된 측면에 focus 가 맞춰져 있습니다.
2012/02/22 - [프로그래밍 놀이터/안드로이드] - [Android/안드로이드] ListView ( 리스트 뷰 ) 첫번째 이야기.
Custom Adapter ListView
<example>
MyListAdapter MyAdapter = new MyListAdapter(this, R.layout.custom, arraylist);
ListView MyList = (ListView)findViewById(R.id.list);
MyList.setAdapter(MyAdapter);
class MyListAdapter extends BaseAdapter{
Context con;
LayoutInflater inflater;
ArrayList<MyItem> arraySrc;
int layout;
public MyListAdapter(Context context, int alayout, ArrayList<MyItem> aarraySrc){
con = context;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arraySrc = aarraySrc;
layout = alayout;
}
public int getCount(){
return arraySrc.size();
}
public String getItem(int position){
return arraySrc.get(position).Name;
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
final int pos = position;
if (convertView == null){
convertView = inflater.inflate(layout, parent, false);
}
// array 내용을 layout의 어떤 항목들과 매치시킬지 설정해줌
// ex) imageview 에 그림, textview에 글자 등..
TextView txt = (TextView)convertView.findViewById(R.id.text);
txt.setText(arraySrc.get(position).Name);
return convertView;
}
}
<중요 API>
View getView(int position, View convertView, ViewGroup parent)
: 리스트 뷰가 각 항목을 출력할 때마다 어댑터의 getView() 호출하여 뷰 요청. parent는 생성되는 뷰의 부모, 즉 리스트 뷰. convertView는 이전에 생성된 차일드 뷰로 최초 호출시에는 null이 전달되기 때문에 커스텀 뷰를 새로 생성하여 리턴해야 한다.
여러 Item Layout 을 가지는 Custom Adapter List View
: List Item 이 모두 똑같이 생기지 않고, 경우에 따라 item의 layout이 바뀌는 녀석.
<example>
class MultiAdapter extends BaseAdapter{
LayoutInflater mInflater;
ArrayList<ListItem> arSrc;
public MultiAdapter(Context context, ArrayList<ListItem> aritem){
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arSrc = arItem;
}
public in getCount() { /* To Do */ }
public ListItem getItem(int position) { /* To Do */}
public long getItemId(int position { return position; }
// getView가 생성하는 뷰의 개수 리턴. 항상 같은 뷰이면 1.
// 갯수를 제대로 조사해주지 않으면 다운 될 수 있다.
public int getViewTypeCount(){ return 2; }
public View getView(int position, View convertView, ViewGroup parent){
if (convertView == null){
int res = 0;
switch (arSrc.get(position).Type){
case 0:
res = R.layout.textedit;
break;
case 1:
res = R.layout.btnicon;
break;
}
convertView = mInflater.inflate(res, parent, false);
}
switch (arSrc.get(position).Type){
case 0:
// To Do (mapping)
case 1:
// To Do (mapping)
}
return convertView;
}
}
List Activity ( 리스트 액티비티 )
: 시스템 차원에서 리스트 뷰만으로 액티비티를 구성하는 class. ListView를 내부 멤버로 가지며, 액티비티 전체를 리스트 뷰가 가득 채우도록 되어 있다. (별도의 layout이 필요하지 않다.)
<APIs>
ListView getListView();
void setListAdapter (ListAdapter adapter)
void onListItemClick (ListView I, View vm, int positionm, long id)
<example>
public class ListOnly extends ListActivity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
...
ArrayAdapter<String> Adapter = new ArrayAdapter<String>(this, ~, ~);
setListAdapter(Adapter);
// setContentView() 의 역할까지 해준다.
}
public void onListItemClick(ListView list, View view, int positionm, long id){
// To Do
}
}
로그인 없이 추천 가능합니다. 손가락 꾸욱~
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] MAT ( Mermory Analyzer Tool ) Android, Eclipse 사용 방법. (0) | 2012.02.24 |
---|---|
[Android/안드로이드] Memory Leak ( 메모리 누수 ) 를 피하는 방법. (2) | 2012.02.23 |
[Android/안드로이드] ListView ( 리스트 뷰 ) 첫번째 이야기. (0) | 2012.02.22 |
[Android/안드로이드] Title Bar 에 Progress Bar 띄우기 ( 타이틀 바에 프로그레스 바 띄우기 ) (0) | 2012.02.22 |
[Android/안드로이드] Progress Bar ( 프로그래스 바 ) (0) | 2012.02.22 |
댓글