android getTag, setTag를 이용하여 listview에 있는 버튼 이벤트 받기
1. listview에 있는 버튼이벤트를 받기 위해서는 버튼에 아래 속성을 추가해야한다.
<Button
android:focusable="false"
/>
2. listview에 있는 버튼 이벤트를 받기 위해서는
1) Activity에서 Adapter를 사용할때 clickevent를 전달한다.
private MessageAdap mMessageAdapter = null;
mMessageAdapter = new MessageAdap(this, mOnClickListener);
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
2) Adapter의 생성자에서 OnClickListener 값을 전달 받음
public class MessageAdap extends BaseAdapter {
private LayoutInflater mInflater;
private OnClickListener mOnClickListener = null;
public MessageAdap(Context context, OnClickListener onClickListener){
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mOnClickListener = onClickListener;
}
}
3) Adapter의 getView에서 선택된 row에 있는 버튼에 클릭이벤트 등록 및 setTag 사용하여 값 전달.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.message_item, null);
holder = new ViewHolder();
holder.iv_content_icon = (ImageView) convertView.findViewById(R.id.iv_content_icon);
holder.tv_message_title = (TextView) convertView.findViewById(R.id.tv_message_title);
holder.tv_message_writer = (TextView) convertView.findViewById(R.id.tv_message_writer);
holder.tv_message_time = (TextView) convertView.findViewById(R.id.tv_message_time);
holder.btn_message_ok = (TextView) convertView.findViewById(R.id.btn_message_ok);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if(mOnClickListener != null){
holder.btn_message_ok.setTag(R.string.msg_tag_contents_seq, 123); //seq 값 전달예,
holder.btn_message_ok.setOnClickListener(mOnClickListener); // 클릭리스너 등록
}
return convertView;
}
private static class ViewHolder {
private ImageView iv_content_icon = null;
private TextView tv_message_title = null;
private TextView tv_message_writer = null;
private TextView tv_message_time = null;
private TextView btn_message_ok = null;
}
4) Activity에서 mOnClickListener 작업을 한다. 각 리스트에 있는 버튼의 click 이벤트를 받아서 처리를 한다.
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_message_ok:
String seq = v.getTag(R.string.msg_tag_contents_seq).toString();
Log.e("Log", "seq="+seq);
break;
}
}
};
참고 :
android getTag setTag example |
'안드로이드 개발 팁' 카테고리의 다른 글
android 간단한 Custom Dialog 예제 (0) | 2014.03.12 |
---|---|
View pager 사진 보여주기 예제, 포인터 및 애니메이션 포함 (0) | 2014.03.07 |
android drawable resources (tile mode, selector 등등) (0) | 2014.02.20 |
android menu drawer library (0) | 2014.02.19 |
android image cache (universal image loader, LruCache) (1) | 2014.02.17 |