我可以在不放入 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。

我可以在活动中overridehandleKeyDown(),但是有什么方法可以直接覆盖/处理片段中的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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不启动 Activity 的情况下使用通知中的操作

Python 在不重新输入函数参数的情况下覆盖函数/方法

是否可以在不知道它们是啥的情况下覆盖所有 css 样式? [复制]

在不丢失纵横比的情况下将图像放入特定大小的盒子中?

想要在不刷新 Activity 的情况下更新 Android 中的 Listview

我可以创建一个接口对象并在不覆盖它的情况下访问实现该接口的 java 文件的功能吗?