在Activity或Fragment中響應ListView上按鈕的點選方法
阿新 • • 發佈:2018-12-18
通常會有這樣的需求,在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);
}
}