Управление доступностью меню параметров

1

У меня есть действие (act2), которое можно запустить из act1 или act3. Если он запускается из act1, я хотел бы, чтобы мое меню опций было доступно, что означает, что когда вы нажимаете кнопку меню, он появляется. Если он запускается с act3, у меня нет ничего, что должно быть в меню параметров, поэтому я бы хотел, чтобы он не появлялся при нажатии меню. Как я могу это сделать?

Теги:
android-intent
android-menu

3 ответа

2
Лучший ответ

Если вы вызываете 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] оно вообще не будет отображаться.

2

Используя намерения, это возможно. Например:

В 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
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 вы читаете "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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню