androidactivitygroup

android openPanel menu is empty


I have a tabActivity with multiple activities in one tab.

The following code work on android 2.3 but it's not working on android 4.2

ActivityStack.java

public class ActivityStack extends ActivityGroup {
..

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // // what is the current activity?
        menu.add(0, 0, 0, "holder");

    return true;

}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // start a new
    menu.clear();
    // add some menu options
    getLocalActivityManager().getCurrentActivity().onPrepareOptionsMenu(menu);
    return super.onPrepareOptionsMenu(menu);

}

.. Activity1Tab1.java

here I have a button from where I am calling Activity2Tab1.java onClickListener
Intent acIntent = new Intent();
                    acIntent.setClass(getParent(),
                            Activity2Tab1.class);
                    ActivityStack activityStack = (ActivityStack) getParent();
                    activityStack.push("SecondActivity", acIntent);

Activity2Tab1.java

..
here I have multiple layouts...defined
@Override
    public boolean onPrepareOptionsMenu(Menu menu)
    { //add menus or inflate here
        Log.d(TAG, "onPrepareOptionMenu");
        if (!isMainMenuVisible) {
            pushMainMenuUp();
        } else {
            pushMainMenuDown();
        }
        return true;
    }

Need some help!!!

Neither in Activity1Tab1 or in Activity2Tab1 the override method onKeyUp() IS NEVER CALLED. The only called methods are from StackActivity. WHY?


Solution

  • After some research done and some thinking I manage to make this code work.

    Instead of using onPrepareOptionMenu(menu) and onCreateOptionMenu(menu) I've override the following method in StackActivity:

    @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            Log.d(TAG, keyCode+"");
             getLocalActivityManager().getCurrentActivity().onKeyUp(keyCode, event);
                return super.onKeyUp(keyCode, event);
        }
    

    and in Activity1Tab1 and Activity2Tab1 I had the method:

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d(TAG, ""+event.getAction());
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            Log.d(TAG, "MENU_BUTTON_PRESSED");
    
            if (!isMainMenuVisible) {
                pushMainMenuUp();
            } else {
                pushMainMenuDown();
            }
        }
        return super.onKeyUp(keyCode, event);
    
    }