1

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

4

3 回答 3

2

如果您从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] 的情况下,它根本不会显示。

于 2011-04-07T11:51:54.083 回答
2

使用意图,这是可能的。例如:

在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
于 2011-04-07T11:52:10.513 回答
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;
}
于 2011-04-07T12:12:06.233 回答