ListView Item 裏多種點擊事件的用法

思路:因爲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);            }        }    }}
相關文章
相關標籤/搜索