2013-04-22 153 views
22

我已經設置了我的操作欄,但是當我單擊主頁向上按鈕時沒有任何反應。 下面兩個選項是啓用的,所以不應該自動進入家庭活動?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<String> adapter = new ArrayAdapter<String>(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; 
} 
+0

檢查此鏈接中的代碼會有幫助。 [鏈接代碼](http://stackoverflow.com/questions/11304483/proper-way-to-handle-action-bar-button/37692750#37692750) – 2016-06-08 03:49:37

回答

52

正如其他人所說,行爲不會自動發生 - 你需要告訴它到哪裏去。

但是,我需要添加另一個答案,因爲目前的答案都是全部違反了Android設計準則 - Back!= Home。見the documentation

你真的想要做什麼是沿着這線的東西:

@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來清除退出堆棧,這是一個非常有用的功能,當您開始進行家庭活動時,可以在用戶使用「向上」按鈕時阻止堆棧陷入混亂狀態

+0

非常感謝,這就是我一直在尋找的,我假設設置爲true時,它會返回到主類! – user1875797 2013-04-22 15:29:14

+7

+1「Back!= Home」(Y) – Farhan 2014-05-12 19:56:26

+2

我無法統計客戶端堅持主頁按鈕的功能,因爲它需要與iOS版本的應用程序的流程保持一致。 – npace 2014-09-10 07:09:52

5

您需要定義在這裏會發生什麼:

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

在代碼中添加這些行:

@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; 
} 
8

你也是n電子娛樂設備,以確保您的應用程序知道被按下時,它做的事情:

@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)); 
} 
6

我們有元數據定義成AndroidManifast.xml文件中我們的孩子的活動按照官方給出document

<application ... > 
... 
<!-- The main/home activity (it has no parent activity) --> 
<activity 
    android:name="com.example.myfirstapp.MainActivity" ...> 
    ... 
</activity> 
<!-- A child of the main activity --> 
<activity 
    android:name="com.example.myfirstapp.DisplayMessageActivity" 
    android:label="@string/title_activity_display_message" 
    android:parentActivityName="com.example.myfirstapp.MainActivity" > 
    <!-- The meta-data element is needed for versions lower than 4.1 --> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.myfirstapp.MainActivity" /> 
</activity> 

沒有必要定義元數據,如果版本是4.1或以上,你必須像在代碼中一樣啓用您的操作欄主頁按鈕。沒有必要使用後退按鈕代碼,它與我的Android應用程序工作正常:Helper+