我有一个活动(act2),可以从act1或act3启动。如果它是从act1启动的,我希望我的选项菜单可用,这意味着当你按下菜单按钮时,它会显示出来。如果它是从act3启动的,我没有任何东西需要在选项菜单中,所以我希望它不会出现在你按菜单时。我该怎么做呢?
答案 0 :(得分:2)
如果从act1调用act2,则通过bundle将布尔变量传递为true
。如果你从act3调用act2,则将其作为false
传递,或者根本不传递它。
在你的act2中,特别是在onCreate()
方法中捕获那个布尔变量。你必须要小心,如果你没有从act3传递一个bundle,它会在执行这个操作时在act2中抛出null pointer exception
。现在你可以得到一个布尔变量,帮助act2确定它来自何处。 [如果它的真实性来自act1或来自act2]。
现在在您的活动中覆盖onCreateOptionsMenu()
方法,它返回布尔值。因此,如果您通过true
,则按菜单按钮时将弹出菜单项,或者如果您返回false
,则不会弹出任何菜单项。使用从onCreate()方法获取的布尔变量,您可以简单地返回它,以便在显示true
[来自act1]菜单时,或者在false
[来自act3]的情况下,它将不会显示出来。
答案 1 :(得分:2)
使用Intents,这是可能的。例如:
在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
答案 2 :(得分:1)
如果从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;
}