通常会有这样的需求,在item上有一个按钮是确定,或者删除或者是其它的什么按钮,
需要将按钮的实现写着Activity中而且还需要知道点击的是第几个item。
如上面的item中有三个按钮,目前这个上面的三个按钮都是用TextView写的,首先在Adapter中实现点击方法
在getView方法中
holder.way_textview.setOnClickListener(this);
holder.sure_textview.setOnClickListener(this);
holder.location_textview.setOnClickListener(this);
holder.way_textview.setTag(i);
holder.sure_textview.setTag(i);
holder.location_textview.setTag(i);
设置tag是为了获取点击的是第几个item上的按钮
实现View.OnClickListener接口
@Override
public void onClick(View view) {
}
这样点击按钮之后Adapter中就可以进行响应,接下来将点击响应传递到对应的Activity中
首先自定义接口在自定义Adapter中写
private BottomBtnOnclick bottomBtnOnclick;
public BottomBtnOnclick getBottomBtnOnclick() {
return bottomBtnOnclick;
}
public void setBottomBtnOnclick(BottomBtnOnclick bottomBtnOnclick) {
this.bottomBtnOnclick = bottomBtnOnclick;
}
public interface BottomBtnOnclick{
public void click(View view,int index);
}
接口中的方法有两个参数第一个view用来区分点击的是哪个按钮,第二个index用来获取点击的是第几个item。
定义好接口后,在按钮的点击方法里,让接口实现自己的方法
@Override
public void onClick(View view) {
bottomBtnOnclick.click(view,(int)view.getTag());
}
另外还差最后一步在Activity或Fragment中实现接口
alarmAdapter.setBottomBtnOnclick(new AlarmAdapter.BottomBtnOnclick() {
@Override
public void click(View view, int index) {
switch (view.getId()){
case R.id.way_textview:
break;
case R.id.sure_textview:
break;
case R.id.location_textview:
break;
}
}
});
(alarmAdapter为自定义Adapter)即可获取每个按钮的点方法,其中index就为点击的第index个item。
AlarmAdapter中完整代码供参考
package com.example.adefault.gaslot.alarm;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.adefault.gaslot.R;
import com.example.adefault.gaslot.alarm.Model.AlarmModel;
import java.util.List;
import java.util.concurrent.TimeoutException;
public class AlarmAdapter extends BaseAdapter implements View.OnClickListener {
private Context mContext;
private List<AlarmModel>datas;
public List<AlarmModel> getDatas() {
return datas;
}
public void setDatas(List<AlarmModel> datas) {
this.datas = datas;
}
public AlarmAdapter(Context mContext) {
this.mContext = mContext;
}
private BottomBtnOnclick bottomBtnOnclick;
public BottomBtnOnclick getBottomBtnOnclick() {
return bottomBtnOnclick;
}
public void setBottomBtnOnclick(BottomBtnOnclick bottomBtnOnclick) {
this.bottomBtnOnclick = bottomBtnOnclick;
}
@Override
public int getCount() {
if (datas == null)
return 0;
return datas.size();
}
@Override
public Object getItem(int i) {
return datas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
AlarmModel alarmModel = datas.get(i);
ViewHolder holder = null;
if (view == null){
view = LayoutInflater.from(mContext).inflate(R.layout.alarm_item,viewGroup,false);
holder = new ViewHolder();
holder.time_textview = (TextView)view.findViewById(R.id.time_textview);
holder.type_textview = (TextView)view.findViewById(R.id.type_textview);
holder.name_textview = (TextView)view.findViewById(R.id.name_textview);
holder.zone_textview = (TextView)view.findViewById(R.id.zone_textview);
holder.content_textview = (TextView)view.findViewById(R.id.content_textview);
holder.way_content_textview = (TextView)view.findViewById(R.id.way_content_textview);
holder.way_textview = (TextView)view.findViewById(R.id.way_textview);
holder.sure_textview = (TextView)view.findViewById(R.id.sure_textview);
holder.location_textview = (TextView)view.findViewById(R.id.location_textview);
view.setTag(holder);
}else {
holder = (ViewHolder)view.getTag();
}
holder.time_textview.setText(alarmModel.getAlarmDate());
holder.type_textview.setText(alarmModel.getAlarmType());
holder.name_textview.setText("名称:"+alarmModel.getEquipName());
holder.zone_textview.setText("区域:"+alarmModel.getAddr());
holder.content_textview.setText("内容:"+alarmModel.getAlarmContent());
holder.way_content_textview.setText("措施:"+alarmModel.getRemarks());
holder.way_textview.setOnClickListener(this);
holder.sure_textview.setOnClickListener(this);
holder.location_textview.setOnClickListener(this);
holder.way_textview.setTag(i);
holder.sure_textview.setTag(i);
holder.location_textview.setTag(i);
return view;
}
@Override
public void onClick(View view) {
bottomBtnOnclick.click(view,(int)view.getTag());
}
static class ViewHolder{
TextView time_textview;
TextView type_textview;
TextView name_textview;
TextView zone_textview;
TextView content_textview;
TextView way_content_textview;
TextView way_textview;
TextView sure_textview;
TextView location_textview;
}
public interface BottomBtnOnclick{
public void click(View view,int index);
}
}