我可以在不放入 Activity 的情况下覆盖/处理片段中的 keyDown 吗?
Posted
技术标签:
【中文标题】我可以在不放入 Activity 的情况下覆盖/处理片段中的 keyDown 吗?【英文标题】:Can I override/handle keyDown in fragment without put into Activity? 【发布时间】:2017-08-23 16:26:50 【问题描述】:我有一个位于 AAR 中的 fragment
,而包含此 fragment
的主要 activity
位于另一个 APK 中,具体取决于此 AAR。
我可以在活动中override
和handleKeyDown()
,但是有什么方法可以直接覆盖/处理片段中的keyDown
,因为这个activity
有多个片段。
附言我需要捕获各种keyevent
,例如上、下、左、右,不仅仅是返回按钮。
我也尝试实现KeyEvent.Callback
,但是当我通过 UI 导航时它没有捕捉到任何关键事件。
【问题讨论】:
【参考方案1】:第一步:创建一个自定义接口,比如说 KeyEventListener
public interface MyKeyEventListener
boolean onKeyDown(int keyCode, KeyEvent event);
Step2:在Activity中添加currentFragment字段,每次切换fragment时都会更新。基本上它将保存当前可见的片段
Fragment currentFragment;
currentFragment = here getCurrentFragment() etc;
第 3 步:在片段中实现 MyKeyEventListener。您可以在任何片段中跳过接口实现
public class Fragment1 implements MyKeyEventListener
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
//do whatever you want in onKeyDown
第 4 步:在 Activity 中覆盖 onKeyDown
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
if(currentFragment != null && currentFragment instanceof MyKeyEventListener)
((MyKeyEventListener) currentFragment).onKeyDown(keyCode, event);
return true;
return super.onKeyDown(keyCode, event);
【讨论】:
以上是关于我可以在不放入 Activity 的情况下覆盖/处理片段中的 keyDown 吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在不知道它们是啥的情况下覆盖所有 css 样式? [复制]