android:performClick的用法——自定义View增加点击事件更配performClick噢!
文章目录浅析如何使用模拟点击事件配合自定义View浅析performClick 官方注释Call this view’s OnClickListener, if it is defined.Performs all normal actions associated with clicking: reporting accessibility event, playing a sound, etc
浅析
performClick 官方注释
Call this view’s OnClickListener, if it is defined. Performs all normal actions associated with clicking: reporting accessibility event, playing a sound, etc.
调用此视图的 OnClickListener(如果已定义)。 执行与点击相关的所有正常操作:报告无障碍事件、播放声音等。
很明显的意思,通过performClick
调用了OnClickListener
。
看一下performClick
的源码实现:
public boolean performClick() {
// We still need to call this method to handle the cases where performClick() was called
// externally, instead of through performClickInternal()
notifyAutofillManagerOnClick();
final boolean result;
final ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
li.mOnClickListener.onClick(this);
result = true;
} else {
result = false;
}
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
notifyEnterOrExitForAutoFillIfNeeded(true);
return result;
}
关注一个很重要的点,首先判断mOnClickListener
是否为null
。如果不为null
,则调用li.mOnClickListener.onClick(this)
,即会调用到外部写的点击事件。
如何使用
模拟点击事件
这个用法网上大部分都有了,这里也做一下简单的描述:
通过上面的源码分析,大家可以看到通过performClick
可以调用到点击事件,又因为performClick
方法的访问修饰权限是公开的。所以外部可以直接调用performClick
用于模拟点击事件。
举个🌰
val tv = findViewById<TextView>(R.id.tv_main)
tv.setOnClickListener {
Toast.makeText(this,"mock click",Toast.LENGTH_SHORT).show()
}
tv.performClick()
这样执行程序,就会提示mock click
了
配合自定义View
performClick
还有一个重要的使用方式,当自定义View的时候,如果需要有一个默认的点击事件时,你应该如何处理呢?
可以使用performClick
来进行优雅的实现这一需求。
如下所示,举个🌰:
override fun performClick(): Boolean {
if (super.performClick()) return true
//TODO
return true
}
这么写的话,如果外部设置了OnClickListener
则使用外部的点击事件,performClick
l里面的默认操作就无效了。非常适合自定义View的时候使用,灵活度非常高!
更多推荐
所有评论(0)