Action Bar 的 Home 按钮的 onClick 监听器
Posted
技术标签:
【中文标题】Action Bar 的 Home 按钮的 onClick 监听器【英文标题】:Action Bar's onClick listener for the Home button 【发布时间】:2012-06-20 05:42:50 【问题描述】:如何为操作栏的主页按钮实现自定义onClickListener
?
我已经做了一个getSupportActionBar().setDisplayHomeAsUpEnabled(true);
,现在我想将用户重定向到某个活动,以防点击主页按钮。
我试过了:
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch (item.getItemId())
case android.R.id.home:
item.setOnMenuItemClickListener(new OnMenuItemClickListener()
public boolean onMenuItemClick(MenuItem item)
Intent i = new Intent();
i.setClass(BestemmingActivity.this, StartActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return true;
);
default:
return super.onOptionsItemSelected(item);
但它从不进入onMenuItemClick
。
基本上,它就像在this link 中一样完成,但它仍然没有进入监听器。
【问题讨论】:
【参考方案1】:如果其他人需要解决方案
@Override
public boolean onOptionsItemSelected(MenuItem item)
int id = item.getItemId();
if (id == android.R.id.home)
onBackPressed(); return true;
return super.onOptionsItemSelected(item);
【讨论】:
这应该是一个解决方案。很好的答案 和return true;
一起为我工作
在if
块的末尾放一个return true;
,那就对了
此方法不适用于带箭头图标的主页/返回按钮。【参考方案2】:
我使用actionBarSherlock,
在我们设置supportActionBar.setHomeButtonEnabled(true);
之后
我们可以重写 onMenuItemSelected 方法:
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
int itemId = item.getItemId();
switch (itemId)
case android.R.id.home:
toggle();
// Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
break;
return true;
我希望这对你有用~~~祝你好运
【讨论】:
对我不起作用。无法将 onMenuItemSelected 覆盖为其最终版本。 使用android注解只需使用@OptionsItem(android.R.id.home) public void yourMethod() 【参考方案3】:如果我们使用系统给定的操作栏,则以下代码可以正常工作
getActionBar().setHomeButtonEnabled(true);
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
int itemId = item.getItemId();
switch (itemId)
case android.R.id.home:
//do your action here.
break;
return true;
【讨论】:
【参考方案4】:已修复:无需使用 setOnMenuItemClickListener
。
只需按下按钮,它就会通过 Intent 创建并启动 Activity。
非常感谢大家的帮助!
【讨论】:
对,操作栏负责菜单监听器并自动调用onOptionsItemSelected()
。无需手动安装(这实际上可能会破坏)。【参考方案5】:
回答了正在发生的事情的一半。如果 onOptionsItemSelected
在 manifest.xml 系统中设置父活动时无法控制 homeAsUp
按钮,则系统转到父活动。在活动标签中这样使用:
<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
</activity>
【讨论】:
【参考方案6】:如果在 ICS 上运行,您需要显式启用 home 操作。来自the docs:
注意:如果您使用图标导航到主页活动,请注意 从 Android 4.0(API 级别 14)开始,您必须 通过调用显式启用图标作为操作项 setHomeButtonEnabled(true) (在以前的版本中,图标是启用的 默认情况下作为操作项)。
【讨论】:
我已经做了一个getSupportActionBar().setDisplayHomeAsUpEnabled(true);
和一个getSupportActionBar().setHomeButtonEnabled(true);
【参考方案7】:
自定义操作栏 onClickListener 的最佳方式是 onSupportNavigateUp()
此代码将很有帮助link for helping code
【讨论】:
【参考方案8】:您应该删除您的 Override onOptionsItemSelected 并使用此代码重新标记您的 onCreateOptionsMenu
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
return true;
【讨论】:
请添加一些解释以帮助人们理解并去(返回?)阅读***关于仅使用代码回答的政策。以上是关于Action Bar 的 Home 按钮的 onClick 监听器的主要内容,如果未能解决你的问题,请参考以下文章
在 Navigation Drawer 的每个片段中实现不同的 Action Bar 项
使用 JS 或 CSS 检测 iOS 设备是不是有 home bar