NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java

98 lines
3.1 KiB
Java

/*
* This is the source code of Telegram for Android v. 2.0.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2014.
*/
package org.telegram.ui.Components;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerListView extends RecyclerView {
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public static class RecyclerListViewItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
GestureDetector mGestureDetector;
public RecyclerListViewItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
if (mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildPosition(childView));
}
/*int action = e.getAction();
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) {
childView.setPressed(true);
} else if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
childView.setPressed(false);
}*/
} else {
/*int count = view.getChildCount();
for (int a = 0; a < count; a++) {
view.getChildAt(a).setPressed(false);
}*/
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent e) {
}
}
public RecyclerListView(Context context) {
super(context);
}
public RecyclerListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RecyclerListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
requestDisallowInterceptTouchEvent(true);
return super.onInterceptTouchEvent(e);
}
@Override
public void stopScroll() {
try {
super.stopScroll();
} catch (NullPointerException exception) {
/**
* The mLayout has been disposed of before the
* RecyclerView and this stops the application
* from crashing.
*/
}
}
}