思路:因爲item裏須要處理多種點擊事件,因此不便於用listview的onItemClickListener, 須要在adapter裏進行設置不一樣點擊區域的onclicklistenerssh
可是,有時候有些業務邏輯並非在adapter裏處理,因此須要在activity或者 fragment裏提供給adapter一個接口,而後在adapter的點擊事件裏設置這個onclicklistener。ide
eg:this
public interface ItemClickListener {
void onLeftClick(int position);
void onRightClick(int position);
void onItemClick(int position);
}
在activity 裏建立一個ItemClickListener
ItemClickListener onItemClickListener = new ItemClickListener() {
@Override
public void onLeftClick(int position) {
}
@Override
public void onRightClick(int position) {
}
@Override
public void onItemClick(int position) {
}
};
在activity 裏建立一個自定義的XXXAdapter,經過構造傳入onItemClickListener,和數據源list,這樣就能夠在activity裏處理item裏的各類點擊事件了。
mHistoryAdapter = new XXXAdapter(getApplicationContext(),list, onItemClickListener);
XXXAdapter 裏的關鍵設置
holder.btn_cancel.setOnClickListener(new ItemListener(holder));
holder.btn_pay.setOnClickListener(new ItemListener(holder));
getView方法的返回對象view,設置view.setOnClickListener(new ItemListener(holder))處理整個item的點擊事件
class ItemListener implements View.OnClickListener{ public ItemListener(ViewHolder holder) { this.holder = holder; } ViewHolder holder; @Override public void onClick(View v) { if(v.getId() == R.id.rl_arrow){ if(holder.isshowMore){ holder.isshowMore = false; }else{ holder.isshowMore = true; } notifyDataSetChanged(); }else if(v.getId()==R.id.btn_cancel){ if(itemClickListener!=null){ itemClickListener.onLeftClick(holder.pos); } }else if(v.getId()==R.id.btn_pay){ if(itemClickListener!=null){ itemClickListener.onRightClick(holder.pos); } }else{ if(itemClickListener!=null){ itemClickListener.onItemClick(holder.pos); } } }}