【问题标题】:fix java.lang.NullPointerException in the code修复代码中的 java.lang.NullPointerException
【发布时间】:2013-11-13 15:11:13
【问题描述】:

我在上下文菜单的代码中得到NullPointerException。 这里是 onCreateContextmenu 方法

public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, MENU_EDIT, 0, "Edit");
    menu.add(0, MENU_DELETE, 0, "Delete");
}

我在下面代码中的long buttonId = info.id; 行中收到错误

public boolean onContextItemSelected(MenuItem item) {

   AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    long buttonId = info.id;
    switch (item.getItemId()) {
        case MENU_EDIT:
            function1(buttonId);
            break;
        case MENU_DELETE:
            function2(buttonId);
            break;
    }
    return true;
}

谁能帮我解决这个问题

【问题讨论】:

  • 堆栈跟踪会很有帮助。很可能某些东西只是 null 被传递给其中一种方法。
  • 如何获取stacktrace?我是新手,两周前刚开始学习
  • @apgwoz 你能指导我任何显示用于至少两个按钮的上下文菜单的教程或示例吗?我有 8 个按钮,每个按钮都需要 EDITDelete 选项
  • 在函数onContextItemSelected我怎样才能得到被长按的按钮的id
  • @dmserazi:我对安卓开发一无所知。我只是假设 NullPointerException 是由一些简单的事情引起的......我假设堆栈跟踪将显示在您的模拟器提供的任何日志记录中。

标签: android-contextmenu


【解决方案1】:

view 不会传递给 onContextItemSelected

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); long buttonId = info.id;

此代码没有帮助,因为当视图是 button 时,menuInfonull。 Android 文档说“menuInfo 有关应显示上下文菜单的项目的额外信息。此信息将根据v 的类而有所不同”。当vListView menuInfo 方法很好。当它是Button 时,它不起作用。

onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 中,View v 是生成上下文菜单的button。将v 复制到全局View 变量,并在需要查看生成上下文菜单的按钮视图时使用该变量。

How to get the Button view which triggered a Context Menu?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2011-04-03
    • 2016-01-05
    相关资源
    最近更新 更多