我有一个活动 (act2),可以从 act1 或 act3 启动。如果它是从 act1 启动的,我希望我的选项菜单可用,这意味着当您按下菜单按钮时,它会显示出来。如果它是从 act3 启动的,我没有任何东西需要在选项菜单中,所以我希望它在您按下菜单时不会出现。我该怎么办?
3 回答
如果您从act1 调用act2,则true
通过bundle 传递一个布尔变量。如果您从 act3 调用 act2 ,则将其传递false
或根本不传递。
在您的 act2 中,特别是在onCreate()
方法中捕获该布尔变量。您必须小心,如果您没有从 act3 传递一个包,它将null pointer exception
在执行此操作时抛出 act2。现在您可以获得一个布尔变量,帮助 act2 确定它的来源。[如果它是真实的,而不是来自act1或act2]。
现在覆盖onCreateOptionsMenu()
您活动中的方法,它返回布尔值。因此,如果您通过true
,则当您按下菜单按钮时会弹出菜单项,或者如果您返回则不会弹出菜单项false
。使用您从 onCreate() 方法中获取的布尔变量,您可以简单地返回它,这样当它的true
[from act1] 菜单将显示时,或者在false
[from act3] 的情况下,它根本不会显示。
使用意图,这是可能的。例如:
在act1中,在启动act2时,
Intent intent = new Intent(this, Act2.class);
intent.putExtra("showmenu", true);
startActivity(intent);
在 act3 中,您可以将其设置为 false,或者什么也不做。
在act2中,检查并显示
if (intent.getBooleanExtra("showmenu", false))
//show option menu
如果从 act1 启动:
Intent io = new Intent(act1.this, act2.class);
io.putExtra("enableOptionMenu", 1);
startActivity(io);
如果从 act3 启动:
Intent io = new Intent(act3.this, act2.class);
io.putExtra("enableOptionMenu", 0);
startActivity(io);
在 act2 中,您在 onCreate 中阅读“enableOptionMenu”:
int enableOptionMenu;
Intent i = getIntent();
enableOptionMenu = i.getIntExtra("enableOptionMenu", 0);
最后检查 onCreateOptionsMenu 中的 enableOptionMenu:
public boolean onCreateOptionsMenu(Menu menu) {
if (enableOptionMenu == 1) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_act2, menu);
}
return true;
}