Pregunta

flipper = (ViewFlipper) findViewById(R.id.vFslideshow);

    flipper.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            flipper.showNext();

        }
    });
}




@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(flipper.isFlipping()){

        menu.removeItem(0);

    }else{

        menu.removeItem(1);

    }

    return true;
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 0, 0, "start slideshow");
    menu.add(0, 1, 1, "stop slideshow");
    menu.add(0, 2, 2, "close");

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case 0:
        flipper.setFlipInterval(1000);
        flipper.startFlipping();
        break;
    case 1:
        flipper.stopFlipping();
        break;
    case 2:

        this.finish();

        break;
    }

    return true;
}

As you guys can see, i'm trying to check certain conditions to display an option menu by using its onPrepareOptionMenu(Menu menu)

but output i'm getting is somewhat wired, so if someone can help me to understand why i'm getting an unexpected output.

OUTPUT: When this activity gets launched/triggered first time it shows two options (via pressing menu button)"start slideshow" and "close" and after clicking the "start slideshow" in option menu flipper starts flipping, which is fine.But now if i press menu button and option menu pops-up, it shows only one option that is "close". Wondering why it isn't showing "stop slideshow".

Thx..

¿Fue útil?

Solución

So the answer is: implement the onOptionsMenuClosed(Menu menu) and setVisible=true for the menu items that you have hide in onprepareoptionmenu.

here is the sol code:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(flipper.isFlipping()){

        menu.getItem(0).setVisible(false);

    }else{

        menu.getItem(1).setVisible(false);

    }

    return true;
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 0, 0, "start slideshow");
    menu.add(0, 1, 1, "stop slideshow");
    menu.add(0, 2, 2, "close");

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case 0:
        flipper.setFlipInterval(1000);
        flipper.startFlipping();
        break;
    case 1:
        flipper.stopFlipping();
        break;
    case 2:

        this.finish();

        break;
    }

    return true;
}





@Override
public void onOptionsMenuClosed(Menu menu) {
    super.onOptionsMenuClosed(menu);


             menu.getItem(0).setVisible(true);
             menu.getItem(1).setVisible(true);



}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top