0

I have static constant top navigation menu with the following item

<item
    android:id="@+id/action_camera"
    android:enabled="true"
    app:showAsAction="always" />
<item
    android:id="@+id/action_gallery"
    android:enabled="true"
    app:showAsAction="always" />

and I have two class MainActivity and SecondActivity

I wanna make both item appear only if condition met

Exemple : If user clicked on second Activity display both item.

MainActivity

//action bar menu
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     //inflate menu
     getMenuInflater().inflate(R.menu.top_navigation_menu, menu);
     return true;
 }
 //handle actionbar item clicks
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     int id = item.getItemId();
     if (id == R.id.action_camera){
         //OpenCamera
     }
     if (id == R.id.action_gallery){
         //OpenGallery
     }
     return super.onOptionsItemSelected(item);
 }

2 Answers2

2

You can do as follows:

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     //inflate menu
     getMenuInflater().inflate(R.menu.top_navigation_menu, menu);

    MenuItem action_camera_menu_item = menu.findItem(R.id.action_camera);
    MenuItem action_gallery = menu.findItem(R.id.action_gallery);

    action_camera_menu_item.setVisible(conditionOK);
    action_gallery.setVisible(conditionOK);

    return true;
 }
matdev
  • 4,115
  • 6
  • 35
  • 56
  • How do I replace conditionOk into secondActivity class onclick button –  Nov 18 '19 at 15:32
  • You could add the conditionOk as an attribute of your Application class, or pass its value as a parcelable to your SecondActivity's onCreate() – matdev Nov 18 '19 at 15:36
  • 1
    Please just use action_camera_menu_item.setVisible(conditionOK); instead of "if" construct. Upvoted. – ror Nov 18 '19 at 16:08
  • 1
    Note: `invalidateOptionsMenu()` needs to be called if the condition updates at runtime. – Froyo Nov 18 '19 at 16:31
0

Assuming your "condition" is available while onCreateOptionsMenu being called, you can get your menu item by ID like this menu.findItem(...) and then do setVisible(boolean visible) for it.

ror
  • 3,295
  • 1
  • 19
  • 27