我在我的應用程序中使用RecyclerView。我實現了這個帶有自定義項目的觸摸聽者在RecyclerView中的按鈕
Sliderd's Material Design Tutorial
我TouchListener描述是這樣的:
public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
private GestureDetector gestureDetector;
private ClickListener clickListener;
public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
this.clickListener = clickListener;
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.v(getClass().getName(), "onSingleTapUp " + e);
return true;
//return super.onSingleTapUp(e);
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildPosition(child));
}
Log.v(getClass().getName(), "onLongPress" + e);
}
});
Log.v(getClass().getName(), "construtcor invoked");
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
Log.v(getClass().getName(), "onTouchEvent " + e);
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
現在,作爲用戶拉維是問here我想在每個添加一個按鈕回收者視圖的項目。但是如果我點擊這個按鈕,項目點擊偵聽器也會被觸發。我如何實現按鈕的點擊監聽器,而不會對項目本身產生任何副作用?
我認爲在'onInterceptTouchEvent()'你可以做一些像'if(child instanceof Button){...}'只獲得'Button'點擊。否則,你可以在''onBindViewHolder''的'Adapter'中添加'OnClickListener',並用'holder.button.setOnClickListener(..)'' – yennsarah