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

时间:2014-03-10 02:45:42

标签: android inheritance

我的应用程序允许用户更改某些硬键的功能。他们可以选择每个键在应用首选项中执行的操作,然后在onKeyDown上触发用户选择的操作。

我注意到许多测试此功能的人,首先设置一个硬键来执行某些操作,并立即按下键以确认更改是否生效。但是现在,onKeyDown只在我的MainActivity上,他们没有得到正确的反馈。

出于这个原因,我想在我的MainActivity和PreferenceActivity中重用onKeyDown。我尝试扩展BaseActivity,但这对于PreferenceActivity和常规活动都不起作用。有没有办法通过无遗传来做到这一点?我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可能无法通过继承执行此操作,因为PreferenceActivity继承自Activity,因此您无论如何都必须编写2个类(这会破坏目的)。

您也可以使用将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;
    }
}
}

所以在你的onKeyDown中你会使用:

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

希望这有帮助!