72

我怎樣才能實現對操作欄的Home按鍵自定義onClickListener操作欄的onClick偵聽器的主頁按鈕

我已經做了getSupportActionBar().setDisplayHomeAsUpEnabled(true);,現在我想將用戶重定向到某一活動的情況下,點擊Home鍵。

我試着用:

@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喜歡,但它仍然不聽者進入。

回答

7

固定:無需使用setOnMenuItemClickListener。 只要按下按鈕,它就會通過意圖創建並啓動活動。

非常感謝大家對你的幫助!

+0

對,操作欄負責菜單監聽器並自動調用'onOptionsItemSelected()'。無需手動安裝(可以實際上破壞事物)。 –

3

你需要的,如果在運行ICS明確使家庭的行動。從the docs

注:如果您使用的圖標,導航到家庭活動,提防 採用Android 4.0(API級別14)開始,你必須 明確啓用該圖標,通過操作項調用 setHomeButtonEnabled(真)(在以前的版本中,圖標啓用 作爲默認的行動項目)。

+3

我已經做了刪除您的覆蓋onOptionsItemSelected和replate您onCreateOptionsMenu一個'getSupportActionBar()setDisplayHomeAsUpEnabled(真);'。和一個'getSupportActionBar()。setHomeButtonEnabled(true);' – noloman

107

我使用actionBarSherlock, 後我們設置supportActionBar.setHomeButtonEnabled(true);
我們可以覆蓋onMenuItemSelected方法:你~~~好運氣

+3

+1這也適用於本機操作欄。 – Phil

+4

不工作我我。無法覆蓋onMenuItemSelected作爲其最終。 –

+0

使用android註釋只需使用@OptionsItem(android.R.id.home)public void yourMethod(){} –

20

如果我們使用

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

,如果別人需要的解決方案定製操作欄

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == android.R.id.home) { 
     onBackPressed(); return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

這應該是一種溶劑。很好的回答 – jemsnaban

+1

用'return true;'爲我工作 – Rick

+0

在'if'塊末尾加上'return true;'然後它是正確的 – user3175580

2

最好的辦法是onClickListener onSupportNavigateUp()

該代碼會在發生什麼事半部分有幫助link for helping code

1

答案。如果onOptionsItemSelected不控制homeAsUp按鈕,則在manifest.xml系統中設置的父活動轉到父活動。在活動標籤使用這樣的:

<activity ... > 
<meta-data 
android:name="android.support.PARENT_ACTIVITY" 
android:value="com.activities.MainActivity" /> 
</activity> 
-2

你應該與此代碼

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

    } 
+1

請添加一些解釋,以幫助人們理解和去(回?)閱讀stackoverflow有關只有代碼答案的政策。 – N0un