【问题标题】:How to cancel the creation of a context menu after onCreateContextMenu() has been called调用 onCreateContextMenu() 后如何取消上下文菜单的创建
【发布时间】:2014-06-03 20:04:06
【问题描述】:

我有一个为创建上下文菜单注册列表视图的活动:

registerForContextMenu(getListView());

问题是长按某些项目不应该出现上下文菜单,因为这些项目被禁用。

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

    bool bDisplayMenu = isItemEnabled(((AdapterView.AdapterContextMenuInfo) menuInfo).position);

    if(bDisplayMenu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    else
    {
        // WHAT SHOUlD I DO HERE TO CANCEL THE CREATION OF THE CONTEXT MENU?
    }

}

一旦调用 onCreateContextMenu(),我看不到任何取消上下文菜单创建的方法。

【问题讨论】:

  • @LEO87 事实证明,如果我从 onCreateContextMenu() 返回而不创建菜单(只是调用 super.onCreateContextMenu()),那么菜单将不会出现。

标签: android android-listview contextmenu


【解决方案1】:

好吧,原来如果我在调用 super 后立即退出 onCreateContextMenu(),那么上下文菜单根本不会出现。

不确定这是要走的路(我没有看到任何有关此的文档)。

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

    bool bDisplayMenu = isItemEnabled(((AdapterView.AdapterContextMenuInfo) menuInfo).position);

    if(bDisplayMenu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    else
    {
        return; // the context menu will not be displayed
    }

}

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2011-04-08
    • 2014-12-15
    • 2019-05-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多