【问题标题】:onCreateContextMenu is not being calledonCreateContextMenu 没有被调用
【发布时间】:2017-01-10 02:12:06
【问题描述】:

我正在使用以下代码生成onCreateContextMenu,但是,单击列表项时我没有得到任何响应。

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenu.ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    int currentId = (int) info.id;
    menu.add(0, MENU_DELETE_ID, 0, "Delete");
}

稍后我将使用currentId,但上面的代码不会导致弹出带有单词Delete 的弹出窗口。

可能是因为我使用了自定义AdapterView,在我之前的问题中显示在this answer 中吗?另外,我的MainActivity 正在扩展AppCompatActivity,如果这很重要的话。

我检查了其他问题,例如onCreateContextMenu isn't being called,但我没有使用onItemLongClickListener

【问题讨论】:

    标签: java android android-layout android-contextmenu


    【解决方案1】:

    没有足够的代码来理解这里实际出了什么问题。但我可能会建议在实施ContextMenu 时要注意一些常见错误。

    您需要先注册上下文菜单。来自创建上下文菜单的开发人员文档 -

    如果您的活动使用 ListViewGridView 并且您希望每个项目 提供相同的上下文菜单,为上下文菜单注册所有项目 通过将ListViewGridView 传递给registerForContextMenu()

    因此,您可以考虑在 onCreateListActivity 函数中执行类似的操作。

    registerForContextMenu(getListView());
    

    我在您的onCreateContextMenu 中没有看到任何MenuInflater。您需要在创建上下文菜单时扩展视图。

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    

    来自文档

    MenuInflater 允许您从菜单中扩展上下文菜单 资源。回调方法参数包括View 用户选择和一个ContextMenu.ContextMenuInfo 对象提供 有关所选项目的附加信息。如果您的活动有 几个视图,每个视图都提供不同的上下文菜单,您可以 使用这些参数来确定要扩展哪个上下文菜单。

    而且您可能必须为您的列表项实现长点击侦听器。因为它似乎只适用于长点击事件。

    当注册的视图接收到长按事件时,系统调用 你的onCreateContextMenu() 方法。这是您定义菜单的地方 项,通常是通过扩展菜单资源。

    这里是完整的implementation documentation。希望有帮助!

    更新

    如果您不使用ListActivity,您应该无法拨打getListView。在这种情况下,只需在为列表注册上下文菜单时传递ListView 引用。

    ListView lv = (ListView) findViewById(R.id.my_list);
    registerForContextMenu(lv);
    

    【讨论】:

    • getListView() 如果我没记错的话,只能在您的活动扩展 ListAcitivty 时使用。所以既然我不能调用它,那就意味着我不能使用onCreateContextMenu()
    • 请查看更新后的答案,如果有帮助,请接受并投票。
    • 感谢您抽出宝贵时间提供帮助。
    • 很高兴知道这有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-03-31
    • 2012-12-16
    相关资源
    最近更新 更多