Android操作栏主页按钮

我已经设置了我的操作栏,但是当我点击主页按钮时没有任何反应。 以下两个选项已启用,因此不应自动转到主页活动?

ab.setHomeButtonEnabled(true); ab.setDisplayHomeAsUpEnabled(true); 

行动吧

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); final String[] activities; Resources res = getResources(); activities = res.getStringArray(R.array.activities); ActionBar ab = getActionBar(); ab.setHomeButtonEnabled(true); ab.setDisplayHomeAsUpEnabled(true); ab.setTitle(R.string.app_name); ab.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ab.show(); /** Create an array adapter to populate dropdownlist */ ArrayAdapter adapter = new ArrayAdapter(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, activities); /** Setting dropdown items and item navigation listener for the actionbar */ getActionBar().setListNavigationCallbacks(adapter, navigationListener); /** Enabling dropdown list navigation for the action bar */ getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); return true; } 

正如其他人所说,这种行为不是自动发生的 – 你需要告诉它去哪里。

但是,我需要添加另一个答案,因为目前的答案都违反了Android设计指南 – Back!= Home。 请参阅文档

你真正想要做的是这样的事情:

 @Override public boolean onOptionsItemSelected(MenuItem menuItem) { switch (menuItem.getItemId()) { case android.R.id.home: Intent homeIntent = new Intent(this, HomeActivity.class); homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(homeIntent); } return (super.onOptionsItemSelected(menuItem)); } 

这将带您进入父活动,而不仅仅是通过后台堆栈。 我还添加了Intent.Flag以清除后台堆栈,它是一个非常有用的,当你去家庭活动时,当你的用户使用’向上’按钮时,可以阻止后台堆叠混乱

您还需要确保您的应用程序在按下时知道该怎么做:

 @Override public boolean onOptionsItemSelected(MenuItem menuItem) { switch (menuItem.getItemId()) { case android.R.id.home: // ProjectsActivity is my 'home' activity super. onBackPressed(); return true; } return (super.onOptionsItemSelected(menuItem)); } 

我们必须在AndroidManifast.xml文件中将元数据定义到我们的子活动中,如官方文档中所示 :

  ...   ...       

如果版本为4.1或更高版本,则无需定义元数据,您必须像在代码中一样启用操作栏主页按钮。 无需使用后退按钮代码,它与我的Android应用程序正常工作: Helper +

你需要定义这里发生的事情:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); } return true; } 

您可以使用以下方法实现此目的,尽管有很多方法可以实现。

把这一行放在你的onCreate

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

在您的活动中覆盖onSupportNavigateUp方法

 @Override public boolean onSupportNavigateUp() { finish(); return super.onSupportNavigateUp(); } 

在代码中添加以下行:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: System.out.println("Pressed Back Button"); break; default: return super.onOptionsItemSelected(item); } return false; }