文章目錄
- 淺析
- 如何使用
- 模擬點擊事件
- 配合自定義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.
呼叫此視圖的 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則使用外部的點擊事件,performClickl里面的默認操作就無效了,非常適合自定義View的時候使用,靈活度非常高!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/321302.html
標籤:其他
