act1 または act3 から起動できるアクティビティ (act2) があります。act1 から起動する場合は、オプション メニューを利用できるようにしたいと思います。つまり、メニュー ボタンを押すと表示されます。act3から起動する場合、オプションメニューに必要なものが何もないので、メニューを押しても表示されないようにしたいです。これについてどうすればいいですか?
3 に答える
act1 から act2 を呼び出す場合は、true
バンドルを介してブール変数を渡します。また、act3 から act2 を呼び出している場合は、それをfalse
渡すか、まったく渡さないでください。
act2 で、特にonCreate()
メソッドでそのブール変数をキャッチします。act3 からバンドルを渡さない場合、null pointer exception
この操作の実行中に act2 がスローされることに注意する必要があります。これで、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から起動した場合:
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;
}