如何检测是否按下了向上按钮

Zvi*_*Zvi 10 android onkeydown onkeyup onbackpressed

在我的活动中,操作栏仅显示左箭头和活动标题.

当我按下向左箭头时,活动返回到上一个活动,但在onKeyUp,OnkeyDown和OnBackPressed方法中没有注册任何事件.

但是当我按下手机上的Back键(在底部)时,活动将返回到前一个,并且onKeyUp,OnKeyDown和OnBackPressed上的所有方法都会注册一个事件(在logcat中).

如何捕获左箭头(我认为它被称为UP按钮)?

我需要捕获密钥的原因是在onPause方法中知道活动是由用户而不是系统销毁的(例如,如果用户切换到另一个活动).

通过进一步研究他的问题,我发现UP按钮给出了一个由onOptionsItemSelected方法捕获的事件,因为菜单上没有其他按钮,我知道它就是这个按钮.

phd*_*ong 8

请参阅http://developer.android.com/guide/topics/ui/actionbar.html#Handling

处理对操作项的点击

当用户按下某个动作时,系统将调用您的活动的onOptionsItemSelected()方法.使用传递给此方法的MenuItem,您可以通过调用getItemId()来识别该操作.这将返回标记的id属性提供的唯一ID,以便您可以执行相应的操作.例如:

@Override 
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items 
    switch (item.getItemId()) {


        case android.R.id.home:
            onUpButtonPressed(); 
            return true; 



        case R.id.action_search:
            openSearch(); 
            return true; 
        case R.id.action_compose:
            composeMessage(); 
            return true; 
        default: 
            return super.onOptionsItemSelected(item);
    } 
} 
Run Code Online (Sandbox Code Playgroud)

注意:如果通过Fragment类的onCreateOptionsMenu()回调来扩展片段中的菜单项,系统会在用户选择其中一个项时调用该片段的onOptionsItemSelected().但是,活动有机会首先处理事件,因此系统首先在活动上调用onOptionsItemSelected(),然后再调用片段的相同回调.要确保活动中的任何片段也有机会处理回调,请始终将调用传递给超类作为默认行为,而不是在不处理项目时返回false.

要将应用程序图标设置为向上按钮,请调用setDisplayHomeAsUpEnabled().例如:

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ... 
} 
Run Code Online (Sandbox Code Playgroud)


and*_*lic 4

是的,你是对的,你可以在 onOptionsItemSelected 方法中检测是否按下了向上按钮。这应该有效:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
    // Do something here. This is the event fired when up button is pressed.
    return true;
}
return super.onOptionsItemSelected(item); 
}
Run Code Online (Sandbox Code Playgroud)