Android 在首选项和活动之间共享onKeyDown?

Android 在首选项和活动之间共享onKeyDown?,android,inheritance,Android,Inheritance,我的应用程序允许用户更改某些硬键在其上的作用。他们可以在应用程序首选项中选择每个键的作用,然后在onKeyDown上启动用户选择的操作 我注意到,许多测试此功能的人,首先设置一个硬键来执行某些操作,然后立即按下该键以确认更改是否有效。然而,由于目前onKeyDown只针对我的主要活动,他们没有得到正确的反馈 因此,我希望在我的MainActivity和PreferenceActivity中重用onKeyDown。我试图扩展BaseActivity,但这不能同时适用于PreferenceActiv

我的应用程序允许用户更改某些硬键在其上的作用。他们可以在应用程序首选项中选择每个键的作用,然后在onKeyDown上启动用户选择的操作

我注意到,许多测试此功能的人,首先设置一个硬键来执行某些操作,然后立即按下该键以确认更改是否有效。然而,由于目前onKeyDown只针对我的主要活动,他们没有得到正确的反馈


因此,我希望在我的MainActivity和PreferenceActivity中重用onKeyDown。我试图扩展BaseActivity,但这不能同时适用于PreferenceActivity和常规Activity。有没有办法通过遗传来做到这一点?我该怎么做呢?

您可能无法通过继承来实现这一点,因为PreferenceActivity继承自Activity,因此您无论如何都必须编写两个类(这违背了目的)

您也可以使用一个映射,将keydown事件转换为用户设置的事件

public class DownKeyMapper {

private static Map<Integer, Integer> mKeyCodeMap;

public static void init(Map<Integer, Integer> pKeyMap) {
    // init here with your mappings from preferences
    mKeyCodeMap = pKeyMap;
}

public static void mapKey(int pFromKeyCode, int pToKeyCode) {
    mKeyCodeMap.put(pFromKeyCode, pToKeyCode);
}

public static int getMappedKey(int pKeyCode) {
    if (mKeyCodeMap.containsKey(pKeyCode)) {
        return mKeyCodeMap.get(mKeyCodeMap);
    } else {
        return pKeyCode;
    }
}
}
希望这有帮助

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    keyCode = DownKeyMapper.getMappedKey(keyCode);
    return super.onKeyDown(keyCode, event);
}