Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onSimpleItemClick点击事件不灵敏 #761

Closed
kam520c opened this issue Feb 9, 2017 · 28 comments
Closed

onSimpleItemClick点击事件不灵敏 #761

kam520c opened this issue Feb 9, 2017 · 28 comments

Comments

@kam520c
Copy link

kam520c commented Feb 9, 2017

recycleview里的item添加点击事件,当连续点击时,反应会好慢,好像卡了一样。我增加了点击背景颜色改变,因此卡顿非常明显,不知道作者能否帮我解答

recycleView.addOnItemTouchListener(new OnItemClickListener() {
            @Override
            public void onSimpleItemClick(BaseQuickAdapter baseQuickAdapter, View view, int i) {
                onClickNumber(view, i);
            }
        });
``
@CymChad
Copy link
Owner

CymChad commented Feb 10, 2017

版本号?

@kam520c
Copy link
Author

kam520c commented Feb 10, 2017

2.7.0

@kam520c
Copy link
Author

kam520c commented Feb 10, 2017

我更新到最新的2.8.0版本,依然不行,然后我自己写了个adapter,就没有这个问题

@CymChad
Copy link
Owner

CymChad commented Feb 10, 2017

收到,我这边排查一下。

@kam520c
Copy link
Author

kam520c commented Feb 10, 2017

好,下面这个链接的视频是用你的adapter,可以发现快速连续点击两个item,会慢半拍,长按也是慢半拍,而我自己写的并不会出现这样的现象,麻烦作者了。

卡顿的视频:
http://ac-wiz24ixw.clouddn.com/97a79477d33c8952eacc.mp4
正常的点击视频:
http://ac-wiz24ixw.clouddn.com/ba4b2c925c655e9ea779.mp4
``

@AllenCoder
Copy link
Collaborator

收到啊反馈,我来排查一下

@AllenCoder
Copy link
Collaborator

经反复对比测试,发现,确实,我的单击事件在连续快速响应的时间上,要比原生只处理单个view的点击时间,慢大约100ms。 这块原因可能跟我在recyclerview的全部内递归查找view的点击有关,等我回去上班,我重点优化一下这块的算法,感谢你的反馈,如果有更好的处理办法,欢迎提pr

02-10 14:38:59.495 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:38:59.870 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:00.280 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:00.705 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:01.105 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:01.485 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:01.895 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:02.285 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:02.705 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:03.115 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:03.530 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:03.925 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:07.775 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:08.185 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:08.575 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 
02-10 14:39:08.975 16991-16991/com.chad.baserecyclerviewadapterhelper D/SimpleClickListener: SimpleOnItemClick: 

原生的点击快速响应日志:

02-10 14:46:30.320 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:30.460 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:30.620 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:30.775 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:30.965 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.100 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.280 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.425 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.560 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.720 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:31.880 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 
02-10 14:46:32.030 25454-25454/com.allen.recyclerview E/MainActivity: onClick: 

@kam520c
Copy link
Author

kam520c commented Feb 10, 2017

好的,那麻烦你了,我这边也再看一下。

@CymChad CymChad closed this as completed Feb 14, 2017
@CymChad
Copy link
Owner

CymChad commented Feb 14, 2017

问题解决没@kam520c

@CymChad CymChad reopened this Feb 14, 2017
@kam520c
Copy link
Author

kam520c commented Feb 14, 2017

还没有。。。

@AllenCoder
Copy link
Collaborator

等我工作先稳定下来,我来重点优化下

@CymChad
Copy link
Owner

CymChad commented Mar 7, 2017

已添加到待优化列表,暂时先关闭此issues。优化完成后会通知@kam520c

@CymChad CymChad closed this as completed Mar 7, 2017
@kam520c
Copy link
Author

kam520c commented Mar 7, 2017

请问能否问下大概时间,因为项目近期需要拿去展示,如果没这么快优化,我可能需要自己重写adapter

@AllenCoder
Copy link
Collaborator

工作稳定下来了,这周已经安排空闲时间来重点优化。

@kam520c
Copy link
Author

kam520c commented Mar 7, 2017

好的,非常感谢。我项目也是下周参展。

@AllenCoder
Copy link
Collaborator

对了,你说的优化标准,能否给我一个具体的Demo ,用来对比测试?或者提供一个优化的量化标准。正常情况下,这种点击影响也不是太大

@kam520c
Copy link
Author

kam520c commented Mar 7, 2017

额,我主要是在自定义键盘上面,用的GridLayout,经常会出现的场景就是,输入按键会快速点击,例如,超市输入条形码或价格,会按得很快,这个点击不灵敏就会造成很大的困扰。标准就是手机的计算器功能的按键点击吧(快速点击数字来进行计算)。

@AllenCoder
Copy link
Collaborator

AllenCoder commented Mar 8, 2017

我上午写了详细的Demo 做了测试,延迟现象,没有你说的那么严重啊,正常用户我用了最快的手速去点击,1s的触发都会正常响应了,确实不可否认相对于原生慢了大约100ms(原因是由于为了优化整体的点击不丢失,做的处理),但我觉得这100ms对用户的体验和事件的处理并不严重啊。

我写了详细的demo ,点击事件也都有动画背景,是否还跟你的动画背景有关
qq 20170308103536

最糟的情形写法:https://github.com/AllenCoder/Recyclerview/blob/master/app/src/main/java/com/allen/recyclerview/activity/OptimizeItemClickActivity.java

优化写法,将每个计算器的作为一个item用GridManager来布局

或者。你提供一下你的复现Demo,给我测试一下

@kam520c
Copy link
Author

kam520c commented Mar 8, 2017

我的demo:https://github.com/kam520c/KeyBoardView
一般情况下使用是慢0.1s不影响,但是如果加在这种类似计算器的上面,就不可忍受,特别是快速计算的时候,对比系统的键盘输入数字,差别有点大

@AllenCoder
Copy link
Collaborator

03-08 14:25:16.569 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954316580
03-08 14:25:16.689 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954316693
03-08 14:25:16.769 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954316772
03-08 14:25:16.870 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954316872
03-08 14:25:16.940 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954316951
03-08 14:25:16.950 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>80
03-08 14:25:16.950 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 82
03-08 14:25:16.950 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954316955
03-08 14:25:17.020 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317026
03-08 14:25:17.120 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317124
03-08 14:25:17.170 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317180
03-08 14:25:17.270 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317278
03-08 14:25:17.270 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>100
03-08 14:25:17.270 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 101
03-08 14:25:17.270 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954317281
03-08 14:25:17.310 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317312
03-08 14:25:17.430 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317436
03-08 14:25:17.500 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317506
03-08 14:25:17.610 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317614
03-08 14:25:17.610 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>109
03-08 14:25:17.610 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 109
03-08 14:25:17.610 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954317615
03-08 14:25:17.690 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317693
03-08 14:25:17.800 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317804
03-08 14:25:17.881 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954317890
03-08 14:25:17.941 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954317946
03-08 14:25:17.941 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>57
03-08 14:25:17.941 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 57
03-08 14:25:17.941 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954317949
03-08 14:25:18.031 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318040
03-08 14:25:18.111 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318120
03-08 14:25:18.201 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318202
03-08 14:25:18.281 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318286
03-08 14:25:18.291 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>91
03-08 14:25:18.291 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 91
03-08 14:25:18.291 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954318294
03-08 14:25:18.351 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318361
03-08 14:25:18.441 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318451
03-08 14:25:18.521 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318526
03-08 14:25:18.611 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318614
03-08 14:25:18.611 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>89
03-08 14:25:18.611 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 90
03-08 14:25:18.611 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954318616
03-08 14:25:18.691 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318699
03-08 14:25:18.791 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318799
03-08 14:25:18.872 20372-20372/com.allen.recyclerview E/SimpleClickListener: 消费时间 onInterceptTouchEvent: 按下时间 1488954318880
03-08 14:25:18.962 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>1488954318969
03-08 14:25:18.962 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == >>>>89
03-08 14:25:18.962 20372-20372/com.allen.recyclerview D/SimpleClickListener: 消费时间 == 点击事件耗时 90
03-08 14:25:18.962 20372-20372/com.allen.recyclerview W/SimpleClickListener: 消费时间 onInterceptTouchEvent: 1488954318970

我用数据说话,实测我的事件响应并不比系统的慢多少, 我用你发给我的Demo做了测试 ,感觉上确实是慢了半拍,视觉上感觉慢的原因,我也找到了,我在源码处,重置view时做了一定的延时

private void resetPressedView(final View pressedView) {
            if (pressedView != null) {
                pressedView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (pressedView != null) {
                            pressedView.setPressed(false);
                        }

                    }
                }, 100);
            }

            mIsPrepressed = false;
            mPressedView = null;
        }

既然这样,我去掉延时,即可,你所看到的卡顿是视觉上,我重置view状态时,做了100ms的状态延时,当时的考虑是出于担心view会为空。新版修改去掉延时。

@kam520c
Copy link
Author

kam520c commented Mar 8, 2017

长按事件的延时也同样是这个原因吗?

AllenCoder pushed a commit to AllenCoder/BaseRecyclerViewAdapterHelper that referenced this issue Mar 8, 2017
2. upgrade version (gradle build Tools)
@CymChad
Copy link
Owner

CymChad commented Mar 8, 2017

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.8.5'

@kam520c
Copy link
Author

kam520c commented Mar 8, 2017

好像依然是延时的

@AllenCoder
Copy link
Collaborator

我这边已经根据你的Demo 做了数据测试,你可以根据我写的自己测试。按钮 点击从按下到回调触发按钮不到100ms ,已经很快了 。跟系统原生的一个级别。你视觉上的延迟代码已经关掉了。

https://github.com/AllenCoder/KeyBoardView

@tysheng
Copy link
Contributor

tysheng commented Mar 9, 2017

if (!isEnabled(viewHolder.getItemViewType())) return;
        View view = viewHolder.getView(id);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    int position = viewHolder.getLayoutPosition() - getHeaderLayoutCount();
                    mOnItemClickListener.onItemClick(v, position);
                }
            }
        });
 private boolean isEnabled(int viewType) {
        switch (viewType) {
            case HEADER_VIEW:
            case LOADING_VIEW:
            case FOOTER_VIEW:
            case EMPTY_VIEW:
                return false;
            default:
                return true;
        }
    }

自己定义接口,加点击事件

@kam520c
Copy link
Author

kam520c commented Mar 9, 2017

@tysheng 谢谢,按照你的思路,我搞掂了

ar7eneJ added a commit to ar7eneJ/noahc3 that referenced this issue Feb 2, 2022
2. upgrade version (gradle build Tools)
jahrsgrbe90 added a commit to jahrsgrbe90/x2009again8 that referenced this issue Feb 3, 2022
2. upgrade version (gradle build Tools)
cnihperhu added a commit to cnihperhu/DanielRivera031 that referenced this issue Feb 3, 2022
2. upgrade version (gradle build Tools)
itxhongbw added a commit to itxhongbw/Abhi5681 that referenced this issue Feb 3, 2022
2. upgrade version (gradle build Tools)
jsxu957hou added a commit to jsxu957hou/BushmanLabv that referenced this issue Feb 3, 2022
2. upgrade version (gradle build Tools)
wechasvyong added a commit to wechasvyong/RohanSabale that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
2544265067957468 added a commit to 2544265067957468/vk4ice that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
2734375202390592 added a commit to 2734375202390592/JasonCheeeeenb that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
16927211073538631 added a commit to 16927211073538631/RohanSardar that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
dhy9406708299458 added a commit to dhy9406708299458/mncinnocent7 that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
wurlywee added a commit to wurlywee/syfless1999x that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
mklhollund064718 added a commit to mklhollund064718/vinay-swamy that referenced this issue Feb 4, 2022
2. upgrade version (gradle build Tools)
zbxenpa added a commit to zbxenpa/BilalRifasp that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
crusillo2333400003 added a commit to crusillo2333400003/Florenzie that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
9348322980709552 added a commit to 9348322980709552/Ladididididideyor that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
ou97 added a commit to ou97/AndrewYatzkano that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
rin4573281133639 added a commit to rin4573281133639/mark-tasaka that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
vdoqapatv added a commit to vdoqapatv/FSU-AC that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
555047241855949 added a commit to 555047241855949/smartinternz02a that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
NkyLams added a commit to NkyLams/joanby that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
xuluxiu5330 added a commit to xuluxiu5330/meet-projects8 that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
Leoakdsalaur added a commit to Leoakdsalaur/theusual2 that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
lorizhixuing added a commit to lorizhixuing/learn-co-studentsx that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
aaawcoghao added a commit to aaawcoghao/PatriLotoy that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
niyunwtnfenf added a commit to niyunwtnfenf/DylanVann that referenced this issue Feb 5, 2022
2. upgrade version (gradle build Tools)
kwixue added a commit to kwixue/YogurtCodeCharacterw that referenced this issue Feb 6, 2022
2. upgrade version (gradle build Tools)
zhanfong127888 added a commit to zhanfong127888/socadkq that referenced this issue Feb 28, 2022
2. upgrade version (gradle build Tools)
mfao8ll9vss added a commit to mfao8ll9vss/MayerEmadq that referenced this issue Feb 28, 2022
2. upgrade version (gradle build Tools)
Neos21yvm7v added a commit to Neos21yvm7v/eshmakar5 that referenced this issue Feb 28, 2022
2. upgrade version (gradle build Tools)
dodocarlos0od2x added a commit to dodocarlos0od2x/atharvanaik10b that referenced this issue Feb 28, 2022
2. upgrade version (gradle build Tools)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants