控制选项菜单可用性

时间:2011-04-07 11:39:03

标签: android android-intent android-menu

我有一个活动(act2),可以从act1或act3启动。如果它是从act1启动的,我希望我的选项菜单可用,这意味着当你按下菜单按钮时,它会显示出来。如果它是从act3启动的,我没有任何东西需要在选项菜单中,所以我希望它不会出现在你按菜单时。我该怎么做呢?

3 个答案:

答案 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;
}