2013. 1. 27. 20:11
안드로이드 - 리스트뷰 안에있는 여러 버튼 이벤트 처리 안드로이드 이야기2013. 1. 27. 20:11
728x90
반응형
안드로이드 - 리스트뷰 안에있는 여러 버튼 이벤트 처리
리스트뷰에 버튼이 여러개 있을때 어떻게 해야 할까?버튼 각각에게 다른 리스너를 넣어주고 싶다면?
버튼에 onClick 리스너에게 그 버튼의 포지션을 알려 주려면?
다음 코드를 보면 해답이 있다.
final OnClickListener myBtn1Listener = new OnClickListener() {
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
// do something!
}
};
final OnClickListener myBtn2Listener = new OnClickListener() {
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
// do something here as well!!
}
};
static class ViewHolder {
Button btn1;Button btn2;
}
getView(int position, View convertView, ViewGroup parent) {
View v = convertView;ViewHolder holder;if(v == null) {
holder = new ViewHolder();v = mInflater.inflate(R.layout.list_item, parent, false);holder. btn1= (Button) v.findViewById(R.id.button1);holder. btn2 = (Button) v.findViewById(R.id.button2);holder.btn1.setOnClickListener(myBtn1Listener);holder.btn2.setOnClickListener(myBtn2Listener);v.setTag(holder);
}else {
holder = v.getTag();
}holder.btn1.setTag(Integer.valueOf(position));holder.btn2.setTag(Integer.valueOf(position));
}
리스너를 파이널로 만들어서 등록해 주었다.
new OnClickListener 로 getView에서 해줄 수 있지만 new 를 써서 객체를 생성하게 되면
시간이 오래 걸린다.
getView에서는 그런 것을 되도록이면 피하는게 좋다.
리스너 등록은 convertView가 null일때만 해주는 이유가 재활용 할때도 그 버튼에 계속 리스너가 등록되어 있기 때문에 다시해줄 필요가 없기 때문이다.
오로지 그 위치만 정확하게 알려 주면 된다 (setTag를 이용해서)
[출처] 안드로이드 리스트뷰 안에있는 여러 버튼|작성자 dythmall
728x90
반응형
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - 자바 진법 변환 (0) | 2013.02.02 |
---|---|
안드로이드 - ImageView Round처리 (0) | 2013.01.30 |
안드로이드 - 구글 애드센스 수익이 나왔습니다. (0) | 2013.01.15 |
안드로이드 - 구글 애드센스 지급보류가 해제되다 (0) | 2013.01.15 |
안드로이드 - 스마트폰 해상도 총정리 (0) | 2012.11.10 |