如何检测是不是按下了向上按钮
Posted
技术标签:
【中文标题】如何检测是不是按下了向上按钮【英文标题】:How to detect if the Up button was pressed如何检测是否按下了向上按钮 【发布时间】:2015-10-30 06:46:37 【问题描述】:在我的活动中,操作栏仅显示左箭头和活动标题。
当我按下左箭头时,活动返回到上一个活动,但在 onKeyUp、OnkeyDown 和 OnBackPressed 方法中没有注册任何事件。
但是当我按下手机上的返回键(在底部)时,活动会返回到上一个,并且所有方法 onKeyUp、OnKeyDown 和 OnBackPressed 都会注册一个事件(在 logcat 中)。
我怎样才能捕捉到那个左箭头(我认为它被称为向上按钮)?
我需要捕获关键的原因是在 onPause 方法中知道该活动是由用户而不是由系统销毁的(例如,如果用户切换到另一个活动)。
通过进一步调查他的问题,我发现 UP 按钮提供了一个由 onOptionsItemSelected 方法捕获的事件,并且由于菜单上没有其他按钮,我知道它是这个按钮。
【问题讨论】:
谢谢。我添加了代码来测试主页键,以防我将来在操作栏中添加其他操作项 【参考方案1】:见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);
注意:如果你从片段中膨胀菜单项,通过片段 类的 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);
...
【讨论】:
谢谢!尽管这个线程很老,但这是有效的! (因为我面临同样的问题)。谢谢【参考方案2】:是的,您是对的,您可以在 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);
【讨论】:
太棒了!谢谢!以上是关于如何检测是不是按下了向上按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何检测在 PyQt5 中按下了动态添加的按钮之一? [复制]