gpt4 book ai didi

java - 在自定义方法调用之前强制菜单膨胀

转载 作者:行者123 更新时间:2023-12-01 10:59:13 24 4
gpt4 key购买 nike

这个问题让我做噩梦:(
请考虑以下代码 fragment :

MainActivity.java

public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenu = menu;
return super.onPrepareOptionsMenu(menu);
}

protected void updateActionBar() {
mMenu.findItem(R.id.action_some).setVisible(state); <---------------- mMenu is null
}
}

BaseActivity.java

public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

...

updateActionBar(); <---------------- This causes crash

}

protected abstract void updateActionBar();
}

问题

调试后,我发现 updateActionBar() 的动态调度发生在调用 onPrepareOptionsMenu() 之前。因此,Menu 膨胀有点延迟,并且 mMenu 没有更新。

问题

如何确保在调用 updateActionBar() 之前填充 mMenu

注意:为了关注核心问题并提高可读性,我只粘贴了导致崩溃的部分代码。

最佳答案

How do I make sure that mMenu gets populated before call to updateActionBar()?

稍后调用 updateActionBar(),例如在 BaseActivity 中重写 onPrepareOptionsMenu()

updateActionBar() is being called inside a listener and moving the whole listener inside onresume doesn't make sense

听者在哪里并不重要。 您正在收听的事件很重要。显然,您正在使用监听器来监听 onPrepareOptionsMenu() 之前发生的某些事件。这是行不通的。要么:

  • 选择其他事件,或

  • 至少在调用 onPrepareOptionsMenu() 之前不要注册监听器,或者

  • 如果事件已触发,并且尚未调用 onPrepareOptionsMenu(),则无需实际执行工作,而是设置一个 boolean 值(例如 needToDoMenuStuff) 为 true,然后在 onPrepareOptionsMenu()

  • 中完成该工作

关于java - 在自定义方法调用之前强制菜单膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33456034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com