I'm having an issue trying to open a drop down menu in any activity other than my main activity right now. The three dots in the top right corner that I can click to open the menu in MainActivity still show up in PieChartActivity, but clicking them does nothing.
**EDIT : It might be important to note that I'm using the drop down menu in the first activity to navigate to the second activity. Then in that second activity, clicking the three dots in the corner doesn't open that activity's menu.
Here's my code:
In 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;
}
In 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>
In PieChartActivity :
@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;
}
In 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>
Solved! For anyone having this same problem, here's the issue I had:
It was a problem with the layout of the secondary activities. Each had a header which contained the menu buttons, but that header was underneath a transparent part of another element in the layout, making the menu buttons inaccessible. I changed the layouts from constraint layout to linear layout with a vertical orientation, so that the layout element containing the main component of each secondary activity would be fixed to the bottom of the header instead of overlapping it.
Thank you to everyone who replied!