Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onKeyPreIme不调用_Android_Android Layout_Android Custom View_Keypress_Android Event - Fatal编程技术网

Android onKeyPreIme不调用

Android onKeyPreIme不调用,android,android-layout,android-custom-view,keypress,android-event,Android,Android Layout,Android Custom View,Keypress,Android Event,我有一个自定义视图继承了线性布局,该视图位于视图切换器中。我想在按下Back键时返回到上一个视图,因此我覆盖了此视图中的onPreKeyIme,但当我按下Back键时,它似乎没有进入方法,并且活动处理Back 我错过了什么 @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) return viewModel.back

我有一个自定义视图继承了
线性布局
,该视图位于
视图切换器中。我想在按下Back键时返回到上一个视图,因此我覆盖了此视图中的
onPreKeyIme
,但当我按下Back键时,它似乎没有进入方法,并且活动处理Back

我错过了什么

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK)
        return viewModel.backClicked();
    return super.onKeyPreIme(keyCode, event);
}
我在if语句中有一个断点,它永远不会冻结在那里


另外,我不允许使用片段。

尝试重写
dispatchKeyEvent
方法。这样做:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
       Log.d("Test","Back Pressed");
       return viewModel.backClicked();
    }
    return super.dispatchKeyEvent(event);
}

尝试重写
dispatchKeyEvent
方法。这样做:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
       Log.d("Test","Back Pressed");
       return viewModel.backClicked();
    }
    return super.dispatchKeyEvent(event);
}

为什么不使用
onBackPressed
回调而不是
onKeyPreIme
?@VasylGlodan我需要在视图级别捕获它。啊哈,我明白了。您是否想过在自定义视图中创建一些公共方法来更改视图结构/外观等,并在onBackPressed中调用此视图之外的方法?类似于:
public void onBackPressed(){view.handleBack();}
如果没有其他方法的话。这是一个巨大而独特的项目,我只是在处理其中的一小部分。@VasylGlodan,是的,这段代码已经实现了。:)为什么不使用
onBackPressed
回调而不是
onKeyPreIme
?@VasylGlodan我需要在视图级别捕获它。啊哈,我明白了。您是否想过在自定义视图中创建一些公共方法来更改视图结构/外观等,并在onBackPressed中调用此视图之外的方法?类似于:
public void onBackPressed(){view.handleBack();}
如果没有其他方法的话。这是一个巨大而独特的项目,我只是在处理其中的一小部分。@VasylGlodan,是的,这段代码已经实现了。:)我使用“dispatchKeyEventPreIme”。谢谢你的回答。我会在一天内奖励赏金的。谢谢。很高兴我能帮到你:)我使用“dispatchKeyEventPreIme”。谢谢你的回答。我会在一天内奖励赏金的。谢谢。很高兴我能帮助你:)