如何为操作栏的主页按钮实现自定义
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
。
基本上,就像此链接中一样完成,但它仍然没有进入侦听器。
如果其他人需要解决方案
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed(); return true;
}
return super.onOptionsItemSelected(item);
}
我使用actionBarSherlock, 设置后
supportActionBar.setHomeButtonEnabled(true);
@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;
}
如果我们使用系统给定的操作栏,以下代码可以正常工作
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;
}
已修复:无需使用
setOnMenuItemClickListener
。
只需按下按钮,它就会通过意图创建并启动活动。
非常感谢大家的帮助!
回答了所发生事情的一半。如果
onOptionsItemSelected
不控制 homeAsUp
按钮,当父 Activity 在 manifest.xml 中设置时,系统会转到父 Activity。在活动标签中这样使用:
<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
</activity>
如果在 ICS 上运行,您需要显式启用 home 操作。来自文档:
注意:如果您使用该图标导航至家庭活动,请注意 从 Android 4.0(API 级别 14)开始,您必须 通过调用显式启用图标作为操作项 setHomeButtonEnabled(true)(之前的版本中,图标已启用 默认情况下作为操作项)。
自定义操作栏 onClickListener 的最佳方法是 onSupportNavigateUp()
此代码将会很有帮助帮助代码的链接
2023年答案: 添加
android:parentActivityName=".NameOfParentActivity"
到显示设置的 Activity(在 AndroidManifest.xml 中)。
您应该删除 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;
}