【问题标题】:Android - openOptionsMenu doesn't work in onCreateAndroid - openOptionsMenu 在 onCreate 中不起作用
【发布时间】:2011-02-16 03:40:08
【问题描述】:

有没有其他方法可以在显示活动后调用 openOptionsMenu 而不使用这样的东西:

新的 Handler().postDelayed(新的 Runnable() { 公共无效运行(){ 打开选项菜单(); } }, 1000);

参考: http://groups.google.com/group/android-beginners/browse_frm/thread/b10a8ea840c07725/1ce48bb147a3ed1a?#1ce48bb147a3ed1a

编辑:我会很感激这样的例子:

公共无效 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 现在我猜应该做类似 Window.Callback.onAttachedToWindow(...) 的事情? }

【问题讨论】:

  • 那个解决方案真的很脆弱

标签: android


【解决方案1】:

我再次查看Activity,它具有从Window.Callback 继承的方法onAttachedToWindow,从API 级别5 开始。如果您使用此级别,那么您只需在您的@ 中覆盖此方法987654326@。

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    openOptionsMenu();
}

如果您使用的是 5 之前的版本,则必须改写 onAttachedToWindow method in View。如果您的View 是用代码创建的,这将非常容易。如果它是在 XMl 中创建的,那么它并没有那么难 - 您应该会发现 instructions here 很有帮助。

【讨论】:

  • 我应该在哪里插入这个覆盖,因为 Activity 没有 onAttachedToWindow?
  • 你能给我完整的例子吗?提前致谢!
  • @kape123:我做了更多的研究。我希望这可以解决问题。
  • 是的......现在肯定很清楚(我正在使用 API 4)......非常感谢您的帮助! (我会接受你的回答并尽快给予赏金)
【解决方案2】:

我的解决方案

//Open menu manually from code 
    Timer timing = new Timer();
    timing.schedule(new TimerTask() {

                /**
                 * {@inheritDoc}
                 */
                @Override
                public void run() {

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            openOptionsMenu();
                        }
                    });

                }
            }, 1000);

【讨论】:

  • ...那是我已经在我的问题中发布的更糟糕的代码版本
  • 嘿,你试过了吗?我在市场上自己的应用程序中使用它。
  • 在启动/加载期间使用基于计时器的调度通常是一种不好的做法,尤其是在您可以使用专用回调的情况下。
猜你喜欢
  • 2017-05-22
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多