【问题标题】:Android invalidateOptionsMenu() for API < 11适用于 API < 11 的 Android invalidateOptionsMenu()
【发布时间】:2012-12-10 02:46:45
【问题描述】:

我使用了ActivityCompat.invalidateOptionsMenu(MainActivity.this);,这样我的菜单项“刷新”就可以自动启用/禁用,而无需触摸“菜单”选项(想象用户让菜单保持打开状态......我需要“刷新”菜单项自动禁用和启用自身)。

ActivityCompat.invalidateOptionsMenu(MainActivity.this) 在 Android 11+ 中运行良好。但是我可以为 android API

这在 Android API 11+ 中运行良好,使用 onPrepareOptionsMenuActivityCompat.invalidateOptionsMenu(MainActivity.this)。 问题是试图在 Android API

这是我的onPrepareOptionsMenu 方法:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}

【问题讨论】:

标签: android menu


【解决方案1】:

如果 API 高于或等于 11 并因此受支持,这将返回 true。在 API 11 之前,菜单是在按下菜单按钮时绘制的,因此不需要此方法,因为它会自动发生。

【讨论】:

  • 我需要在没有用户与菜单按钮交互的情况下更新菜单项。想象一下,当我的异步任务正在运行时,用户让菜单保持打开状态......使用该方法,菜单项会在 api 11+ 中自动更新。如果我删除它,它就不起作用。但我仍然需要在 android api 中自动更新菜单项
  • 当我的异步任务完成时,我执行 ActivityCompat.invalidateOptionsMenu(MainActivity.this);为了更新菜单itens。但它只适用于 api 11+。如何在没有用户与菜单按钮交互的情况下强制在 api
  • 几乎可以通过编程方式在设备上按两次菜单按钮
【解决方案2】:

API &lt; 11 上使用supportInvalidateOptionsMenu() 方法

【讨论】:

    【解决方案3】:

    ActivityCompat.invalidateOptionsMenu() 不回调onPrepareOptionsMenu(); 它只是直接更新菜单。只需输入一些Log.d() 并自行查看。

    这对我有用(我正在使用 API 8):

    private Menu mMenu;
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.track_fragment, menu);
        mMenu = menu;
        }
    ...
    private void someMethod() {
    ...
        if (mMenu != null) {
           MenuItem item = mMenu.findItem(R.id.new_track);
           if (item != null) {
                item.setVisible(false);
                ActivityCompat.invalidateOptionsMenu(this.getActivity());
            }
        }
    ...
    }
    

    我的someMethod() 被多个地方调用,甚至在onCreateOptionsMenu() 之前,所以我必须检查mMenu != null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 2014-12-29
      相关资源
      最近更新 更多