Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 控制选项菜单可用性_Android_Android Intent_Android Menu - Fatal编程技术网

Android 控制选项菜单可用性

Android 控制选项菜单可用性,android,android-intent,android-menu,Android,Android Intent,Android Menu,我有一个活动(act2),可以从act1或act3启动。如果它是从act1启动的,我希望我的选项菜单可用,这意味着当你按下菜单按钮时,它会显示出来。如果它是从act3启动的,我没有什么需要在选项菜单中,所以我希望它不会出现在您按下菜单。我该怎么做呢?如果从act1调用act2,则通过bundle传递一个布尔变量作为true。如果您正在从act3调用act2,请将其作为false传递,或者根本不传递它 在act2中,特别是在onCreate()方法中,捕获该布尔变量。您必须小心,如果您没有从act

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

如果从act1调用act2,则通过bundle传递一个布尔变量作为
true
。如果您正在从act3调用act2,请将其作为
false
传递,或者根本不传递它

在act2中,特别是在
onCreate()
方法中,捕获该布尔变量。您必须小心,如果您没有从act3传递包,那么在执行此操作时,它将在act2中抛出
null指针异常。现在您可以得到一个布尔变量,它可以帮助act2确定它的来源。[如果它是真的,那么它来自act1或act2]


现在在活动中重写
onCreateOptionsMenu()
方法,它将返回布尔值。因此,如果您通过
true
,当您按下菜单按钮时,菜单项将弹出,或者如果您返回
false
,则不会弹出菜单项。使用您从onCreate()方法获取的布尔变量,您可以简单地返回它,这样当它的
true
[从act1]菜单将显示时,或者如果
false
[从act3]它将根本不显示。

如果您从act1调用act2,则将布尔变量作为
true
传递到bundle。如果您正在从act3调用act2,请将其作为
false
传递,或者根本不传递它

在act2中,特别是在
onCreate()
方法中,捕获该布尔变量。您必须小心,如果您没有从act3传递包,那么在执行此操作时,它将在act2中抛出
null指针异常。现在您可以得到一个布尔变量,它可以帮助act2确定它的来源。[如果它是真的,那么它来自act1或act2]


现在在活动中重写
onCreateOptionsMenu()
方法,它将返回布尔值。因此,如果您通过
true
,当您按下菜单按钮时,菜单项将弹出,或者如果您返回
false
,则不会弹出菜单项。使用从onCreate()方法获取的布尔变量,您只需在显示其
true
[从act1]菜单时返回它,或者在
false
[从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中,在启动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);
最后检查OnCreateOptions菜单中的EnableOptions菜单:

public boolean onCreateOptionsMenu(Menu menu) {
    if (enableOptionMenu == 1) {    
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_act2, menu);
    }
    return true;
}

如果从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);
最后检查OnCreateOptions菜单中的EnableOptions菜单:

public boolean onCreateOptionsMenu(Menu menu) {
    if (enableOptionMenu == 1) {    
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_act2, menu);
    }
    return true;
}