如何为操作栏的主页按钮实现自定义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中一样,但它仍然没有进入监听器。
答案 0 :(得分:110)
我使用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;
}
我希望这对你有用~~~祝你好运
答案 1 :(得分:98)
如果其他人需要解决方案
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed(); return true;
}
return super.onOptionsItemSelected(item);
}
答案 2 :(得分:20)
如果我们使用系统给定的操作栏,代码工作正常
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;
}
答案 3 :(得分:7)
修正:无需使用setOnMenuItemClickListener
。
只需按下按钮,它就会通过意图创建并启动活动。
非常感谢大家的帮助!
答案 4 :(得分:3)
如果在ICS上运行,则需要显式启用主页操作。来自the docs:
注意:如果您使用该图标导航到家庭活动,请注意 从Android 4.0(API级别14)开始,您必须 通过调用显式启用图标作为操作项 setHomeButtonEnabled(true)(在以前的版本中,图标已启用 默认情况下作为操作项。)
答案 5 :(得分:2)
自定义操作栏onClickListener的最佳方法是onSupportNavigateUp()
答案 6 :(得分:1)
回答了正在发生的事情的一半。如果在manifest.xml系统中的父活动集设置为父活动时onOptionsItemSelected
不控制homeAsUp
按钮。在活动标签中使用这样的:
<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
</activity>
答案 7 :(得分:-4)
您应该删除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;
}