Fragment監聽返回鍵(Fragment響應Activity的onKeyDown事件)Kotlin版
阿新 • • 發佈:2019-01-11
在Fragment不僅僅只可以監聽返回鍵哦,所有你見過的按鍵都可以監聽,什麼A~Z,0~9,F1~F12等等我就不舉例子了。至於為什麼寫這篇部落格,因為我的專案是一個Activity+多個Fragment架構的,下面進入正題。。。。直接上程式碼(原創轉載請標明)
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isInterception) { if (backListener != null) { backListener!!.onbackForward() return false } } } else if (keyCode == KeyEvent.KEYCODE_STAR) { if (startListener != null) { startListener!!.onStartButtonPressed() return false } } else if (keyCode == KeyEvent.KEYCODE_POUND) { if (poundListener != null) { poundListener!!.onPoundButtonPressed() return false } } else if (keyCode == KeyEvent.KEYCODE_PERIOD) { if (pointListener != null) { pointListener!!.onPointButtonPressed() return false } } else if (keyCode == KeyEvent.KEYCODE_F1) { if (f1Listener != null) { f1Listener!!.onF1Pressed() } } else if (keyCode == KeyEvent.KEYCODE_F2) { if (f2Listener != null) { f2Listener!!.onF2Pressed() } } else if (keyCode == KeyEvent.KEYCODE_F3) { if (f3Listener != null) { f3Listener!!.onF3Pressed() } } return super.onKeyDown(keyCode, event) }
以上程式碼是寫在MainActivity裡面的,在onkeydown事件下監聽不同按鍵的KeyKode(可以參考keycode列表傳送門--->http://www.cnblogs.com/bluestorm/p/4886662.html),我這裡主要監聽了星號鍵,井號鍵,英文.,F1,F2,F3,有人會問為什麼要監聽F1,F2,F3,因為最近在做PDA,按鍵比較多。廢話不多說,那我們怎麼把這個Activity中的事件傳到Fragment中呢,就是通過介面,上程式碼:
這裡簡單的舉了一個例子,我們通過介面回撥的方式將事件傳到Fragment,所以定義了一個方法,onF1Pressed(),接下來在BaseFragment實現這個介面,從而實現介面的方法onF1Pressed(),並且在fragment中初始化Activity中定義的介面物件,下面是程式碼:interface FragmentF1Listener { fun onF1Pressed() }
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) if (activity is MainActivity) { (activity as MainActivity).backListener = this (activity as MainActivity).startListener = this (activity as MainActivity).poundListener = this (activity as MainActivity).pointListener = this (activity as MainActivity).f1Listener = this (activity as MainActivity).f2Listener = this (activity as MainActivity).f3Listener = this // activity.isInterception = true } }
記得要在銷燬時,消除引用,下面是程式碼
override fun onDestroy() {
super.onDestroy()
if (activity is MainActivity) {
(activity as MainActivity).backListener = null
(activity as MainActivity).startListener = null
(activity as MainActivity).poundListener = null
(activity as MainActivity).pointListener = null
(activity as MainActivity).f1Listener = null
(activity as MainActivity).f2Listener = null
(activity as MainActivity).f3Listener = null
// activity.isInterception = true
}
if (presenter != null) {
presenter!!.onDestroy()
}
}
這樣就可以實現正在Framgnet中監聽Back,以及更多的鍵了