1. 程式人生 > >在Activity或Fragment中響應ListView上按鈕的點選方法

在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);
    }
}