Last active
October 2, 2015 08:19
-
-
Save zhcnxf/25d47a3cc2ea058359e0 to your computer and use it in GitHub Desktop.
RecyclerView.OnItemClickListener
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.taosha.android.widget; | |
import android.support.v7.widget.RecyclerView; | |
import android.view.MotionEvent; | |
import android.view.View; | |
import android.view.ViewConfiguration; | |
/** | |
* Created by San on 8/31/15. | |
*/ | |
public class OnItemClickAdapter implements RecyclerView.OnItemTouchListener { | |
private final OnItemClickListener mOnItemClickListener; | |
private boolean mIsNotClick; | |
private View mClickingChild; | |
private boolean mDisallowIntercept; | |
public OnItemClickAdapter(OnItemClickListener onItemClickListener) { | |
this.mOnItemClickListener = onItemClickListener; | |
} | |
@Override | |
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent ev) { | |
int action = ev.getActionMasked(); | |
if (action != MotionEvent.ACTION_DOWN && mDisallowIntercept) | |
return false; | |
switch (action) { | |
case MotionEvent.ACTION_UP: { | |
if (!mIsNotClick && mClickingChild != null) { | |
performOnItemClick(rv, mClickingChild); | |
} | |
break; | |
} | |
case MotionEvent.ACTION_MOVE: { | |
if (!mIsNotClick && mClickingChild != null) { | |
View child = rv.findChildViewUnder(ev.getX(), ev.getY()); | |
if (child != mClickingChild) { | |
mIsNotClick = true; | |
mClickingChild.setPressed(false); | |
} | |
} | |
break; | |
} | |
case MotionEvent.ACTION_DOWN: { | |
final View child = mClickingChild = rv.findChildViewUnder(ev.getX(), ev.getY()); | |
if (child != null) { | |
child.setPressed(true); | |
mIsNotClick = false; | |
} else { | |
mIsNotClick = true; | |
} | |
mDisallowIntercept = false; | |
break; | |
} | |
} | |
return false; | |
} | |
private void performOnItemClick(RecyclerView rv, View child) { | |
RecyclerView.ViewHolder vh = rv.getChildViewHolder(child); | |
rv.post(() -> { | |
mOnItemClickListener.onItemClick(rv, vh); | |
}); | |
} | |
@Override | |
public void onTouchEvent(RecyclerView rv, MotionEvent e) { | |
} | |
@Override | |
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { | |
this.mDisallowIntercept = disallowIntercept; | |
} | |
public interface OnItemClickListener { | |
void onItemClick(RecyclerView rv, RecyclerView.ViewHolder viewHolder); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment