在Android中动态启用/禁用菜单项

时间:2015-01-21 18:59:23

标签: android fragment menuitem

我正在开发一个应用程序,我正在使用Swipable Tabs - 使用FragmentActivity和每个Tab的相应Fragment实现。

现在我在每个片段(Tab)中都有复选框。选中复选框后,我需要在应用程序的操作栏中启用几个菜单项(如发送/共享/删除),并在未选中复选框时禁用这些菜单。

我们怎样才能做到这一点?任何指针都将受到赞赏。

- Ramky

2 个答案:

答案 0 :(得分:3)

在运行时更改菜单项

系统调用onCreateOptionsMenu()后,它会保留您填充的菜单实例,并且不会再次调用onCreateOptionsMenu(),除非由于某种原因菜单失效。但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态,而不是在活动生命周期中进行更改。

如果要根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中执行此操作。此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()回调。)

参考documentation

@Override
 public boolean onPrepareOptionsMenu (Menu menu) {
     if (condition_true)
         menu.getItem(item_index).setEnabled(false);
     return true;
 }

答案 1 :(得分:1)

public Menu toggleMenu;
boolean isflag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.your_menu,menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    toggleMenu = menu;
    toggleItem();
    return super.onPrepareOptionsMenu(menu);
}
public void toggleItem(){
    MenuItem item1= toggleMenu.findItem(R.id.item1);
    MenuItem item2= toggleMenu.findItem(R.id.item2);
    if(isflag)
    {
        item1.setVisible(false);
        item2.setVisible(true);
    }
    else
    {
        item1.setVisible(true);
        item2.setVisible(false);
    }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()){

        case R.id.item1:
            isflag = true;
            toggleItem();
            break;

        case R.id.item2:
            isflag = false;
            toggleItem();
            break;
    }
    return super.onOptionsItemSelected(item);
}