Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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 如何检测是否按下了向上按钮_Android_Onkeydown_Onkeyup_Onbackpressed - Fatal编程技术网

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

Android 如何检测是否按下了向上按钮,android,onkeydown,onkeyup,onbackpressed,Android,Onkeydown,Onkeyup,Onbackpressed,在“我的活动”中,操作栏仅显示左箭头和活动标题 当我按下左箭头时,活动返回到上一个活动,但onKeyUp、OnkeyDown和OnBackPressed方法中没有注册任何事件 但当我按下手机上的Back键(在底部)时,活动返回到上一个,所有方法onKeyUp、OnKeyDown和OnBackPressed都会注册一个事件(在logcat中) 我如何捕捉那个左箭头(我想它被称为向上按钮) 我需要捕获密钥的原因是要在onPause方法中知道活动是由用户而不是系统销毁的(例如,如果用户切换到另一个活动

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

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

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

我如何捕捉那个左箭头(我想它被称为向上按钮)

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


通过进一步调查,我发现UP按钮给出了一个由OnOptions ItemSelected方法捕获的事件,由于菜单上没有其他按钮,我知道它就是这个按钮。

是的,你是对的,你可以检测到OnOptions ItemSelected方法中是否按下了UP按钮。这应该起作用:

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); 
}

处理对操作项的点击

当用户按下某个操作时,系统将调用活动的OnOptions ItemSelected()方法。使用传递给此方法的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);
    } 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ... 
} 
注意:如果从片段中膨胀菜单项,请通过片段 类的onCreateOptionsMenu()回调,系统调用 当用户选择以下选项之一时,该片段的OnOptions ItemSelected() 这些项目。但是,该活动有机会处理该事件 首先,系统首先调用 活动,然后为片段调用相同的回调。确保 活动中的任何片段也有机会处理 回调,始终将调用作为默认值传递给超类 行为,而不是在不处理项目时返回false

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

@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);
    } 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ... 
} 

谢谢。我添加了代码来测试home键,以防我将在FuturAbank You中的操作栏中添加其他操作项!尽管这条线已经很旧了,但这条线仍然有效!(当我面对同样的问题时)。谢谢!谢谢