У меня есть действие (act2), которое можно запустить из act1 или act3. Если он запускается из act1, я хотел бы, чтобы мое меню опций было доступно, что означает, что когда вы нажимаете кнопку меню, он появляется. Если он запускается с act3, у меня нет ничего, что должно быть в меню параметров, поэтому я бы хотел, чтобы он не появлялся при нажатии меню. Как я могу это сделать?
Если вы вызываете act2 из act1, передайте логическую переменную как true
через bundle. И если вы вызываете act2 из act3, пропустите его как false
или не передавайте его вообще.
В вашем act2 и специально в onCreate()
метод поймать эту логическую переменную. Вы должны быть осторожны, чтобы, если вы не передаете пакет из act3, он будет бросать null pointer exception
в act2 во время выполнения этой операции. Теперь вы можете получить логическую переменную, которая помогает act2 определять, откуда она взялась. [если оно истинно, чем оно произошло от act1 или от act2].
теперь переопределяет метод onCreateOptionsMenu()
в вашей активности, он возвращает boolean. Поэтому, если вы пройдете true
, после появления пунктов меню, когда вы нажмете кнопку меню, или никаких пунктов меню не появится, верните false
. Используйте эту логическую переменную, которую вы извлекли из метода onCreate(), вы можете просто вернуть ее так, когда будет отображаться ее меню true
[from act1] или в случае false
[from act3] оно вообще не будет отображаться.
Используя намерения, это возможно. Например:
В act1 при запуске act2,
Intent intent = new Intent(this, Act2.class);
intent.putExtra("showmenu", true);
startActivity(intent);
В act3 вы можете либо установить его на false, либо ничего не делать.
В действии2 проверьте и покажите
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 вы читаете "enableOptionMenu" в onCreate:
int enableOptionMenu;
Intent i = getIntent();
enableOptionMenu = i.getIntExtra("enableOptionMenu", 0);
и, наконец, проверить, что enableOptionMenu в onCreateOptionsMenu:
public boolean onCreateOptionsMenu(Menu menu) {
if (enableOptionMenu == 1) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_act2, menu);
}
return true;
}