onPrepareOptionMenu问题(菜单菜单)?

时间:2012-08-22 10:54:28

标签: android optionmenu

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;
}

正如大家们所见,我正在尝试通过使用onPrepareOptionMenu(菜单菜单)来检查某些条件以显示选项菜单

但是我得到的输出有点连线,所以如果有人能帮助我理解为什么我会得到意想不到的输出。

输出:当此活动首次启动/触发时,它会显示两个选项(通过按菜单按钮)“开始幻灯片放映”和“关闭”,然后在选项菜单中单击“开始幻灯片放映”后,翻转开始翻转,这很好。现在,如果我按下菜单按钮并弹出选项菜单,它只显示一个“关闭”选项。想知道为什么它没有显示“停止幻灯片放映”。

Thx ..

1 个答案:

答案 0 :(得分:0)

所以答案是:对onprepareoptionmenu中隐藏的菜单项实现onOptionsMenuClosed(菜单菜单)和setVisible = true。

这是sol代码:

@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);



}