如果您想了解从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat的相关知识,那么本文是一篇不可错过的文章,我们将对
如果您想了解从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat的相关知识,那么本文是一篇不可错过的文章,我们将对sorted传递reverse=true进行全面详尽的解释,并且为您提供关于.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up.、
- 从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat(sorted传递reverse=true)
- .MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up.
<_getSelectedIndex> - Android ListView与OnItemClickListener和GestureDetector
- Android RecyclerView 单击、长按事件:基于 OnItemTouchListener +GestureDetector 标准实现(二),封装抽取成通用工具类
从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat(sorted传递reverse=true)
我有一个实现RecyclerView.OnItemTouchListener的片段。如何 仅 将ReclickerView
事件和单击和Long-click运动事件
传递给GestureDetectorCompat。这就是说,我只想处理单击和长按,其余事件应该由RecyclerView处理,因为它通常会发生。我该如何设置?
public class MyFragment extends Fragment implements RecyclerView.OnItemTouchListener, GestureDetector.OnGestureListener { protected RecyclerView recyclerView; protected RecyclerView.Adapter adapter; protected LinearLayoutManager layoutManager; private GestureDetectorCompat detector; public MyFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.myfrag, container, false); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview); layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); recyclerView.addOnItemTouchListener(this); adapter = new MyAdapter(myData)); recyclerView.setAdapter(adapter); return rootView; } @Override public boolean onDown(MotionEvent e) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } @Override public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) { return false; } @Override public void onTouchEvent(RecyclerView recyclerView, MotionEvent event) { }}
答案1
小编典典您必须GestureDetectorCompat
在onCreateView()
方法中进行初始化:
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.myfrag, container, false); detector = new GestureDetectorCompat(getActivity(), new RecyclerViewOnGestureListener()); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview); layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); recyclerView.addOnItemTouchListener(this); adapter = new MyAdapter(myData)); recyclerView.setAdapter(adapter); return rootView;}
RecyclerViewOnGestureListener
是您自己的内部类扩展SimpleOnGestureListener
(提供OnGestureListener
方法的空实现)
private class RecyclerViewOnGestureListener extends SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); int position = recyclerView.getChildPosition(view); // handle single tap return super.onSingleTapConfirmed(e); } public void onLongPress(MotionEvent e) { View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); int position = recyclerView.getChildPosition(view); // handle long press super.onLongPress(e); }}
现在看一行(来自onCreateView()
方法):
recyclerView.addOnItemTouchListener(this);
在我们的例子中,“ this” OnItemTouchListener
包含两个我们需要实现的方法:
@Overridepublic boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { detector.onTouchEvent(e); return false;}@Overridepublic void onTouchEvent(RecyclerView rv, MotionEvent e) {}
这是这些方法的含义的解释:https
:
//developer.android.com/reference/android/support/v7/widget/RecyclerView.OnItemTouchListener.html
您只需要处理来自的单击和长按事件即可RecyclerView
。
.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2385) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2306) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.GeneratedConstructorAccessor4.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:443) at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:141) at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:111) at cn.qjj.mysql.MySQLPool.getNewConnection(MySQLPool.java:72) at cn.qjj.mysql.MySQLPool.init(MySQLPool.java:63) at cn.qjj.mysql.MySQLPool.<init>(MySQLPool.java:32) at cn.qjj.mysql.MySQLPool.getInstance(MySQLPool.java:39) at cn.qjj.mysql.SqlUtils.<clinit>(SqlUtils.java:33) at cn.qjj.solr.MsgUtil.main(MsgUtil.java:31) Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1112) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483) at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2324) ... 18 more java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006) at cn.qjj.mysql.MySQLPool.init(MySQLPool.java:63) at cn.qjj.mysql.MySQLPool.<init>(MySQLPool.java:32) at cn.qjj.mysql.MySQLPool.getInstance(MySQLPool.java:39) at cn.qjj.mysql.SqlUtils.<clinit>(SqlUtils.java:33) at cn.qjj.solr.MsgUtil.main(MsgUtil.java:31)
<_getSelectedIndex> 在进入页面的时候,经常会见到log 日志控制台会抛出如下提示信息:
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
如图:
解决办法如下:在给字段设置lov的时候,去掉勾选是否包含空选项,如图:去掉最下方 Include "No Selection Item"

Android ListView与OnItemClickListener和GestureDetector
我有一个以下ListActivity:
public class ShowDayActivity extends ListActivity implements OnItemClickListener {
private GestureDetector gestureDetector;
private View.OnTouchListener gestureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.day);
registerForContextMenu(getListView());
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
getListView().setonItemClickListener(this);
getListView().setonTouchListener(gestureListener);
}
@SuppressWarnings("static-access")
@Override
public boolean onoptionsItemSelected(MenuItem item) {
...
return super.onoptionsItemSelected(item);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
...
return super.onContextItemSelected(item);
}
Override
public void onItemClick(AdapterView<?> parent,View v,int pos,long id) {
editEvent(pos);
}
class MyGestureDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_disTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELociTY = 200;
@Override
public boolean onFling(MotionEvent e1,MotionEvent e2,float veLocityX,float veLocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_disTANCE && Math.abs(veLocityX) > SWIPE_THRESHOLD_VELociTY) {
Log.d("ICS-Calendar","Fling left");
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_disTANCE && Math.abs(veLocityX) > SWIPE_THRESHOLD_VELociTY) {
Log.d("ICS-Calendar","Fling right");
return true;
}
return false;
}
}
}
listItems上的contextListener(long-click)完美地工作.今天我添加了gestureListener和Detector,它也是这样,但是:
GestureDetector检测到一切都没有了,但是在完成了逻辑之后,会打开上下文菜单,这显然不是我想要的.任何想法我做错了,还是我可以做什么?
解决方法
通常,您需要调用cancelLongPress()方法,并检测到onFling后的所有视图的子项.但是对于AbsListView,这个方法什么也不做:(
但是我已经找到了解决方法:在onFling回调中,处理完所有内容后,为ListView对象执行下一步:
Event cancelEvent = Event.obtain(ev2);
cancelEvent.setAction(MotionEvent.ACTION_UP);
listView.onTouchEvent(cancelEvent);

Android RecyclerView 单击、长按事件:基于 OnItemTouchListener +GestureDetector 标准实现(二),封装抽取成通用工具类
Android RecyclerView 单击、长按事件:基于 OnItemTouchListener +GestureDetector 标准实现(二),封装抽取成通用工具类
我写的附录文章 2,介绍了 Android 如何基于 OnItemTouchListener +GestureDetector 实现单击、长按事件的监听,由于如今 RecyclerView 在 Android 开发是如此的普遍,以及 RecyclerView 的单击事件是如此的常用,如果像附录文章 2 那样把一堆事件监听写到业务逻辑代码里面,那得写多少遍重复代码!所以我把给 RecyclerView 添加点击事件的 Listener 抽取、封装成一个常用的工具栏类 RecyclerViewUtil。
在给一个 RecyclerView 添加单击事件时候,跟 ListView 的监听事件一样,只需要简单的写如下代码即可完成:
//第一步,先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);
//第二步,直接set
util.setOnItemClickListener(new RecyclerViewUtil.OnItemClickListener() {
@Override
public void onItemClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 单击",Toast.LENGTH_SHORT).show();
}
});
长按事件也类似:
//先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);
util.setOnItemLongClickListener(new RecyclerViewUtil.OnItemLongClickListener() {
@Override
public void onItemLongClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 长按",Toast.LENGTH_SHORT).show();
}
});
封装、抽取好的通用 RecyclerViewUtil.java 全部代码:
package zhangphil.app;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Phil on 2016/11/19.
*/
public class RecyclerViewUtil {
private RecyclerView mRecyclerView = null;
private GestureDetector mGestureDetector = null;
private RecyclerView.SimpleOnItemTouchListener mSimpleOnItemTouchListener;
private OnItemClickListener mOnItemClickListener = null;
private OnItemLongClickListener mOnItemLongClickListener = null;
private Context context;
public RecyclerViewUtil(Context context, RecyclerView recyclerView) {
this.context = context;
this.mRecyclerView = recyclerView;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
//长按事件
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
if (mOnItemLongClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemLongClickListener.onItemLongClick(position, childView);
}
}
}
//单击事件
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (mOnItemClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemClickListener.onItemClick(position, childView);
return true;
}
}
return super.onSingleTapUp(e);
}
});
mSimpleOnItemTouchListener = new RecyclerView.SimpleOnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if (mGestureDetector.onTouchEvent(e)) {
return true;
}
return false;
}
};
mRecyclerView.addOnItemTouchListener(mSimpleOnItemTouchListener);
}
public void setOnItemClickListener(OnItemClickListener l) {
mOnItemClickListener = l;
}
public void setOnItemLongClickListener(OnItemLongClickListener l) {
mOnItemLongClickListener = l;
}
//长按事件接口
public interface OnItemLongClickListener {
public void onItemLongClick(int position, View view);
}
//单击事件接口
public interface OnItemClickListener {
public void onItemClick(int position, View view);
}
}
使用时候直接把 RecyclerViewUtil.java 复制到自己的项目代码工程中即可。
附录:
1,《RecyclerView 点击事件》链接:http://blog.csdn.net/zhangphil/article/details/46771865
2,《Android RecyclerView 单击、长按事件标准实现:基于 OnItemTouchListener + GestureDetector》:http://blog.csdn.net/zhangphil/article/details/53230157
今天关于从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat和sorted传递reverse=true的分享就到这里,希望大家有所收获,若想了解更多关于.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up.、 <_getSelectedIndex> 等相关知识,可以在本站进行查询。
本文标签:
在进入页面的时候,经常会见到log 日志控制台会抛出如下提示信息:
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
<oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedindex> <Could not find selected item matching value "{0}" in {1}>
如图:
解决办法如下:在给字段设置lov的时候,去掉勾选是否包含空选项,如图:去掉最下方 Include "No Selection Item"
Android ListView与OnItemClickListener和GestureDetector
public class ShowDayActivity extends ListActivity implements OnItemClickListener { private GestureDetector gestureDetector; private View.OnTouchListener gestureListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.day); registerForContextMenu(getListView()); gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { @Override public boolean onTouch(View v,MotionEvent event) { return gestureDetector.onTouchEvent(event); } }; getListView().setonItemClickListener(this); getListView().setonTouchListener(gestureListener); } @SuppressWarnings("static-access") @Override public boolean onoptionsItemSelected(MenuItem item) { ... return super.onoptionsItemSelected(item); } @Override public boolean onContextItemSelected(MenuItem item) { ... return super.onContextItemSelected(item); } Override public void onItemClick(AdapterView<?> parent,View v,int pos,long id) { editEvent(pos); } class MyGestureDetector extends SimpleOnGestureListener { private static final int SWIPE_MIN_disTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELociTY = 200; @Override public boolean onFling(MotionEvent e1,MotionEvent e2,float veLocityX,float veLocityY) { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; } // right to left swipe if (e1.getX() - e2.getX() > SWIPE_MIN_disTANCE && Math.abs(veLocityX) > SWIPE_THRESHOLD_VELociTY) { Log.d("ICS-Calendar","Fling left"); return true; } else if (e2.getX() - e1.getX() > SWIPE_MIN_disTANCE && Math.abs(veLocityX) > SWIPE_THRESHOLD_VELociTY) { Log.d("ICS-Calendar","Fling right"); return true; } return false; } } }
listItems上的contextListener(long-click)完美地工作.今天我添加了gestureListener和Detector,它也是这样,但是:
GestureDetector检测到一切都没有了,但是在完成了逻辑之后,会打开上下文菜单,这显然不是我想要的.任何想法我做错了,还是我可以做什么?
解决方法
但是我已经找到了解决方法:在onFling回调中,处理完所有内容后,为ListView对象执行下一步:
Event cancelEvent = Event.obtain(ev2); cancelEvent.setAction(MotionEvent.ACTION_UP); listView.onTouchEvent(cancelEvent);
Android RecyclerView 单击、长按事件:基于 OnItemTouchListener +GestureDetector 标准实现(二),封装抽取成通用工具类
Android RecyclerView 单击、长按事件:基于 OnItemTouchListener +GestureDetector 标准实现(二),封装抽取成通用工具类
我写的附录文章 2,介绍了 Android 如何基于 OnItemTouchListener +GestureDetector 实现单击、长按事件的监听,由于如今 RecyclerView 在 Android 开发是如此的普遍,以及 RecyclerView 的单击事件是如此的常用,如果像附录文章 2 那样把一堆事件监听写到业务逻辑代码里面,那得写多少遍重复代码!所以我把给 RecyclerView 添加点击事件的 Listener 抽取、封装成一个常用的工具栏类 RecyclerViewUtil。
在给一个 RecyclerView 添加单击事件时候,跟 ListView 的监听事件一样,只需要简单的写如下代码即可完成:
//第一步,先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);
//第二步,直接set
util.setOnItemClickListener(new RecyclerViewUtil.OnItemClickListener() {
@Override
public void onItemClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 单击",Toast.LENGTH_SHORT).show();
}
});
长按事件也类似:
//先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);
util.setOnItemLongClickListener(new RecyclerViewUtil.OnItemLongClickListener() {
@Override
public void onItemLongClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 长按",Toast.LENGTH_SHORT).show();
}
});
封装、抽取好的通用 RecyclerViewUtil.java 全部代码:
package zhangphil.app;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Phil on 2016/11/19.
*/
public class RecyclerViewUtil {
private RecyclerView mRecyclerView = null;
private GestureDetector mGestureDetector = null;
private RecyclerView.SimpleOnItemTouchListener mSimpleOnItemTouchListener;
private OnItemClickListener mOnItemClickListener = null;
private OnItemLongClickListener mOnItemLongClickListener = null;
private Context context;
public RecyclerViewUtil(Context context, RecyclerView recyclerView) {
this.context = context;
this.mRecyclerView = recyclerView;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
//长按事件
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
if (mOnItemLongClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemLongClickListener.onItemLongClick(position, childView);
}
}
}
//单击事件
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (mOnItemClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemClickListener.onItemClick(position, childView);
return true;
}
}
return super.onSingleTapUp(e);
}
});
mSimpleOnItemTouchListener = new RecyclerView.SimpleOnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if (mGestureDetector.onTouchEvent(e)) {
return true;
}
return false;
}
};
mRecyclerView.addOnItemTouchListener(mSimpleOnItemTouchListener);
}
public void setOnItemClickListener(OnItemClickListener l) {
mOnItemClickListener = l;
}
public void setOnItemLongClickListener(OnItemLongClickListener l) {
mOnItemLongClickListener = l;
}
//长按事件接口
public interface OnItemLongClickListener {
public void onItemLongClick(int position, View view);
}
//单击事件接口
public interface OnItemClickListener {
public void onItemClick(int position, View view);
}
}
使用时候直接把 RecyclerViewUtil.java 复制到自己的项目代码工程中即可。
附录:
1,《RecyclerView 点击事件》链接:http://blog.csdn.net/zhangphil/article/details/46771865
2,《Android RecyclerView 单击、长按事件标准实现:基于 OnItemTouchListener + GestureDetector》:http://blog.csdn.net/zhangphil/article/details/53230157
今天关于从RecyclerView.OnItemTouchListener传递MotionEvents到GestureDetectorCompat和sorted传递reverse=true的分享就到这里,希望大家有所收获,若想了解更多关于.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 5 times. Giving up.、
本文标签: