How can I refresh the ActionBar when onPrepareOptionsMenu switched menu entries?

后端 未结 10 1441
予麋鹿
予麋鹿 2020-12-02 12:05

Within my apps I often enable/disable menu entries and do make them visible from onPrepareOptionsMenu.

Today I started to add the android:showAsAction menu attribute

10条回答
  •  旧时难觅i
    2020-12-02 12:29

    Also make sure you are not calling

    myAppCompatActivity.setToolbarTitle("some dynamic title");
    

    shortly after you have refreshed your menu.

    I had the issue that the drawables would not show up even if there was room for them to be displayed. Once I did an orientation change the drawables then appeared.. ?

    In Summary:

    MainActivity:

    public class MainActivity extends AppCompatActivity {
    
        private boolean showMenu = true;
    
        public void setShowMenu(boolean show) {
            showMenu = show;
            supportInvalidateOptionsMenu();
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.my_menu, menu);
            menu.findItem(R.id.menu_share).setVisible(showMenu);
            // menu.findItem(...
            return true;
        }
    }
    

    FragmentNoMenu:

    public abstract class FragmentNoMenu extends Fragment {
    
        protected MainActivity mainActivity;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
            mainActivity = (MainActivity) getActivity();
            if (mainActivity != null) {
                mainActivity.setShowMenu(false);
            }
        }
    
    }
    

    FragmentWithMenu:

    public abstract class FragmentWithMenu extends Fragment {
    
        protected MainActivity mainActivity;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
            mainActivity = (MainActivity) getActivity();
            if (mainActivity != null) {
                mainActivity.setShowMenu(true);
            }
        }
    
    }
    

提交回复
热议问题