在Activity或Fragment中响应ListView上按钮的点击方法

通常会有这样的需求,在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);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39339407/article/details/84031017