首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 選單無法顯示?onCreateOptionsMenu 未被呼叫完整解決方案

     編輯:程式設計綜合問答

問題現象

在 main.xml 定義選單資源,但 Activity 並未自動產生 onCreateOptionsMenu() 方法,選單圖示始終不出現。初學者常誤以為是 ADT 版本問題,實則是對選單生命週期理解不足。

根本原因

Android 選單機制不會自動產生程式碼。開發者必須在 Activity 或 Fragment 中手動覆寫 onCreateOptionsMenu(Menu menu),並呼叫 getMenuInflater().inflate(R.menu.main, menu) 載入 XML 資源。

標準實作步驟

1. 定義選單資源 res/menu/main.xml

<menu xmlns:android="https://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_settings"
        android:title="@string/settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
</menu>

2. Activity 中覆寫兩個關鍵方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // 載入選單資源
    getMenuInflater().inflate(R.menu.main, menu);
    return true; // 必須回傳 true 才會顯示
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // 處理選單項目點擊
    if (item.getItemId() == R.id.action_settings) {
        startActivity(new Intent(this, SettingsActivity.class));
        return true;
    }
    return super.onOptionsItemSelected(item);
}

3. Fragment 中使用選單

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true); // 關鍵:告訴系統此 Fragment 有選單
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

常見錯誤檢查表

  • ❌ 忘記在 onCreateOptionsMenu 回傳 true
  • ❌ Fragment 未呼叫 setHasOptionsMenu(true)
  • ❌ 選單資源放錯目錄(應在 res/menu/)
  • ❌ android:showAsAction 設定導致圖示隱藏在溢位選單

工具提示

Android Studio 可直接對著 res/menu/ 右鍵 → New → Menu resource 快速建立 XML,並在 Activity 中按 Ctrl+O 搜尋 onCreateOptionsMenu 自動產生覆寫框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved