【问题标题】:Calling onCreateOptionsMenu manually in Android 10在 Android 10 中手动调用 onCreateOptionsMenu
【发布时间】:2019-10-11 10:01:06
【问题描述】:

有什么方法可以强制框架调用我的片段的onCreateOptionsMenu 方法。 我的问题是我正在使用 onResume() 方法做一些工作,这需要一些时间。

    @Override
        protected void onResume() {
            Log.d(TAG,"onResume");
            super.onResume();
            //some work
        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        Log.d(TAG,"onCreateOptionsMenu start");
        menu.add(Menu.NONE,132332,0,"ABCD").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(Menu.NONE,132332,0,"ABC").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        Log.d(TAG,"onCreateOptionsMenu end");
        return super.onCreateOptionsMenu(menu);
    }

我观察到的是onCreateOptionsMenuonResume() 方法完成后经过一些延迟(如1 秒)后被调用。这会导致在 UI 上显示选项菜单时出现少许延迟。 那么,有没有办法强制框架调用我的片段的onCreateOptionsMenu 方法。我在互联网上搜索过,但没有找到任何答案。

【问题讨论】:

  • “我的问题是我在 onResume() 方法中做一些工作,这需要一些时间。” -- 将该工作移至后台线程。如果onResume() 花费的时间超过 1 毫秒,“你做错了”。

标签: java android android-fragments activity-lifecycle android-10.0


【解决方案1】:

您应该致电invalidateOptionsMenu

【讨论】:

  • invalidateOptionsMenu() 仅在菜单创建一次时有效。所以它不起作用。我想要的是成为我早期创建的选项菜单。一旦调用 onCreateOptionMenu,我就可以调用 invalidateOptionsMenu。
  • 问题是你在主线程中做了太多的加载。您应该考虑为此使用AsyncTask
  • 不知道为什么我的回答被否决了。这确实是问题的答案:So, Is there any way to force framework to call my fragment's onCreateOptionsMenu method。原来的问题中没有明确提到真正的问题,这让我情不自禁。
  • @VivekMangal 可能不会,但如果您向我们展示您在 onResume 中所做的事情,这将有所帮助。
【解决方案2】:

你应该在后台线程中做你长期的工作

【讨论】:

  • 不是订单是 onStart->onResume->onCreateOptionsMenu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多