Fragment监听返回键(Fragment响应Activity的onKeyDown事件)Kotlin版
2017-09-23 23:40
447 查看
在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中呢,就是通过接口,上代码:
interface FragmentF1Listener { fun onF1Pressed() }这里简单的举了一个例子,我们通过接口回调的方式将事件传到Fragment,所以定义了一个方法,onF1Pressed(),接下来在BaseFragment实现这个接口,从而实现接口的方法onF1Pressed(),并且在fragment中初始化Activity中定义的接口对象,下面是代码:
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,以及更多的键了
相关文章推荐
- Android开发:监听当前View的左右滑动事件,并返回给当前的activity或者fragment
- [转]TabActivity中监听按键响应(返回键)
- Android中的几个onTouch()事件、onKeyDown监听返回键无效
- Activity搭载多个fragment中webview返回事件的处理
- ontouchevent与onkeydown监听事件,dialog的setOnKeyListener的监听key手机返回键
- 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
- Fragment内的webview监听返回键,activity内两次点击退出App之间相互冲突
- 安卓学习笔记---Fragment 里面加webview 监听onback事件(WebView的返回以及整个退出事件)
- 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
- 在Fragment中监听返回键等物理按键的事件
- 监听Fragment B对用户是否可见——判断Fragment A切回到Fragmnet B、Fragment B跳到Activity 再从Activity返回到Fragment B
- 在Activity或者fragment中响应ListView(Adapter)内部按钮的点击事件
- activity与fragment---监听fragment返回键,fragment中横竖屏切换
- kotlin 的事件监听(Fragment 和 Activity 不同)
- Android必知必会-Fragment监听返回键事件
- 在Activity/Fragment中设置搜索键的监听事件
- Android必知必会-Fragment监听返回键事件
- 在Activity或Fragment中响应ListView内部按钮的点击事件
- 关于v4包的Fragment过渡动画的事件监听无响应问题解决
- Fragment从入门到精通之Activity中响应Fragment中的事件③