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


+ Recent posts