首页 > 解决方案 > Android Studio,选项菜单仅在主活动中打开

问题描述

我现在在尝试在除我的主要活动之外的任何活动中打开下拉菜单时遇到问题。我可以单击以在 MainActivity 中打开菜单的右上角的三个点仍然显示在 PieChartActivity 中,但单击它们没有任何作用。

**编辑:请注意,我使用第一个活动中的下拉菜单导航到第二个活动可能很重要。然后在第二个活动中,单击角落中的三个点不会打开该活动的菜单。

这是我的代码:

在 MainActivity :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.log_header_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    switch(id){
        case R.id.log_save_log:
            Toast.makeText(getApplicationContext(), "SAVE LOG", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_add_new_metric:
            Toast.makeText(getApplicationContext(), "ADD METRIC", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_about_app:
            Toast.makeText(getApplicationContext(), "ABOUT APP", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_user_settings:
            Toast.makeText(getApplicationContext(), "USER SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_log_mode:
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
            Toast.makeText(getApplicationContext(), "LOG MODE", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_log_settings:
            Toast.makeText(getApplicationContext(), "LOG SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_pie_mode:
            startActivity(new Intent(getApplicationContext(), PieChartActivity.class));
            Toast.makeText(getApplicationContext(), "PIE CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_pie_settings:
            Toast.makeText(getApplicationContext(), "PIE CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_radar_mode:
            startActivity(new Intent(getApplicationContext(), RadarChartActivity.class));
            Toast.makeText(getApplicationContext(), "RADAR CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_radar_settings:
            Toast.makeText(getApplicationContext(), "RADAR CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_bar_mode:
            startActivity(new Intent(getApplicationContext(), BarChartActivity.class));
            Toast.makeText(getApplicationContext(), "BAR CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.log_bar_settings:
            Toast.makeText(getApplicationContext(), "BAR CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return true;
}

在 log_header_menu 中:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:title="About This App"
    android:id="@+id/log_about_app"
    app:showAsAction="never"/>

<item
    android:title="User Settings"
    android:id="@+id/log_user_settings"
    app:showAsAction="never"/>

<item
    android:title="Log"
    android:id="@+id/log_log_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Log"
            android:id="@+id/log_log_mode"/>
        <item
            android:title="Log Settings"
            android:id="@+id/log_log_settings"/>
    </menu>

</item>

<item
    android:title="Pie Chart"
    android:id="@+id/log_pie_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Pie Chart"
            android:id="@+id/log_pie_mode"/>
        <item
            android:title="Pie Chart Settings"
            android:id="@+id/log_pie_settings"/>
    </menu>

</item>

<item
    android:title="Radar Chart"
    android:id="@+id/log_radar_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Radar Chart"
            android:id="@+id/log_radar_mode"/>
        <item
            android:title="Radar Chart Settings"
            android:id="@+id/log_radar_settings"/>
    </menu>

</item>

<item
    android:title="Bar Chart"
    android:id="@+id/log_bar_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Bar Chart"
            android:id="@+id/log_bar_mode"/>
        <item
            android:title="Bar Chart Settings"
            android:id="@+id/log_bar_settings"/>
    </menu>

</item>

<item
    android:title="Save Log"
    android:id="@+id/log_save_log"
    android:icon="@drawable/ic_over_write"
    app:showAsAction="always"/>

<item
    android:title="Add Metric"
    android:id="@+id/log_add_new_metric"
    android:icon="@drawable/ic_add_new"
    app:showAsAction="always"/>

</menu>

在饼图活动中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.pie_header_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    switch(id){
        case R.id.pie_about_app:
            Toast.makeText(getApplicationContext(), "ABOUT APP", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_user_settings:
            Toast.makeText(getApplicationContext(), "USER SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_log_mode:
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
            Toast.makeText(getApplicationContext(), "LOG MODE", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_log_settings:
            Toast.makeText(getApplicationContext(), "LOG SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_pie_mode:
            startActivity(new Intent(getApplicationContext(), PieChartActivity.class));
            Toast.makeText(getApplicationContext(), "PIE CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_pie_settings:
            Toast.makeText(getApplicationContext(), "PIE CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_radar_mode:
            startActivity(new Intent(getApplicationContext(), RadarChartActivity.class));
            Toast.makeText(getApplicationContext(), "RADAR CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_radar_settings:
            Toast.makeText(getApplicationContext(), "RADAR CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_bar_mode:
            startActivity(new Intent(getApplicationContext(), BarChartActivity.class));
            Toast.makeText(getApplicationContext(), "BAR CHART", Toast.LENGTH_SHORT).show();
            break;
        case R.id.pie_bar_settings:
            Toast.makeText(getApplicationContext(), "BAR CHART SETTINGS", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return true;
}

在 pie_header_menu 中:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:title="About This App"
    android:id="@+id/pie_about_app"
    app:showAsAction="never"/>

<item
    android:title="User Settings"
    android:id="@+id/pie_user_settings"
    app:showAsAction="never"/>

<item
    android:title="Log"
    android:id="@+id/pie_log_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Log"
            android:id="@+id/pie_log_mode"/>
        <item
            android:title="Log Settings"
            android:id="@+id/pie_log_settings"/>
    </menu>

</item>

<item
    android:title="Pie Chart"
    android:id="@+id/pie_pie_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Pie Chart"
            android:id="@+id/pie_pie_mode"/>
        <item
            android:title="Pie Chart Settings"
            android:id="@+id/pie_pie_settings"/>
    </menu>

</item>

<item
    android:title="Radar Chart"
    android:id="@+id/pie_radar_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Radar Chart"
            android:id="@+id/pie_radar_mode"/>
        <item
            android:title="Radar Chart Settings"
            android:id="@+id/pie_radar_settings"/>
    </menu>

</item>

<item
    android:title="Bar Chart"
    android:id="@+id/pie_bar_menu"
    app:showAsAction="never">

    <menu>
        <item
            android:title="View Bar Chart"
            android:id="@+id/pie_bar_mode"/>
        <item
            android:title="Bar Chart Settings"
            android:id="@+id/pie_bar_settings"/>
    </menu>

</item>

</menu>

标签: javaandroidandroid-studioandroid-activityandroid-menu

解决方案


只需onCreateOptionsMenu()为两项活动添加相同的菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(***same menu id here***, menu);
    return true;
}

推荐阅读