setOnTouchListen事件会报警告,请问怎么处理掉这个警告??

来源:8-1 使用GestureDetector进行手势识别

12313凯皇

2018-07-21 10:36

谁知道这个怎么处理啊,按alter+enter出来的提示是加一个suppert标签,但是加了还是会报这个警告,在哪里去重写那个performClick方法呀,百度出来的回答都是“在合适的地方加”。。

https://img2.mukewang.com/5b529baf000198f615300503.jpg

写回答 关注

2回答

  • 水不要鱼_
    2018-08-28 15:11:36
    // 上面源码被慕娘吃掉了一些。。。重新贴上来
    final ListenerInfo li = mListenerInfo;
    if (li != null && li.mOnClickListener != null) {
        playSoundEffect(SoundEffectConstants.CLICK);
        li.mOnClickListener.onClick(this);
        result = true; // li.mOnClickListener != null
    } else {
        result = false; // li.mOnClickListener == null
    }
  • 水不要鱼_
    2018-08-28 15:09:30

    我当初也是百度没有度到,后来去看了 performClick() 的源码,看到上面的注释写着:

    Call this view's OnClickListener, if it is defined. 

    其实这个 performClick() 方法就是去让 OnClickListener 生效(如果你设置了的话)。


    另外,它的返回值和 OnClickListener 有关:

    // 截取自源码。。。
    final ListenerInfo li = mListenerInfo;
    if (li != null && ) {
        playSoundEffect(SoundEffectConstants.CLICK);
        li.mOnClickListener.onClick(this);
        
    } else {
        
    }

    出现这个警告是因为同时设置了 OnClickListener 和 OnTouchListener,有可能导致 OnClickListener 失效。

    所以只要在 OnTouchListener 的 onTouch() 方法中有调用 performClick() 去让 OnClickListener 生效即可。


    因为它注释上说如果 OnClickListener 生效 就返回 true,正好合意。。。

    @return , false
          otherwise is returned.

    所以我就直接在 OnTouchListener 的 onTouch() 方法中返回这个方法的返回值:

    return v.performClick(); // 这个 v 就是指 onTouch(View v) 中的 v




Android攻城狮的第二门课(第3季)

手势识别、数据存储和4大组件,让你牢牢掌握之前的基础知识点

74888 学习 · 444 问题

查看课程