如何在运行时启用/禁用上下文菜单项

时间:2013-07-01 12:05:11

标签: java android

我想根据特定条件启用/禁用项目......

使用选项菜单,您可以执行以下操作:

.setGroupEnabled(0, false);

但我不知道如何使用上下文菜单

我该怎么做?

由于

编辑:这些项目位于充气菜单

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

        super.onCreateContextMenu(menu, v, menuInfo);

        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.options, menu);
    }

2 个答案:

答案 0 :(得分:1)

您可以在onCreateContextMenu方法中在运行时修改/创建上下文菜单。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
    MyObject obj = (MyObject) myListView.getItemAtPosition(info.position);

    menu.setHeaderTitle("Selection Options");  
    menu.add(0, v.getId(), 0, "Remove " + obj.name); 
}

以下是我从this post获取的一些示例代码。通过重写此方法,您可以将菜单修改为其创建的菜单。只需在此处添加一些条件来控制您的不同场景。

答案 1 :(得分:0)

是的,您可以在运行时在 onCreateContextMenu 方法中启用/禁用上下文菜单项。

下面是一个例子:

@Override
public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v,
                                @Nullable ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    menu.setHeaderTitle("Title text");

    MenuInflater inflater = getActivity().getMenuInflater();
    inflater.inflate(R.menu.history_overflow_item_menu, menu); // Your menu xml file

    // Get menu item using index and set enablity with your conditions.
    if (abc == bcd) {
        menu.getItem(0).setEnabled(false);
    }
}