如何获取在上下文菜单中点击的项目的位置?

4

我正在使用这段代码获取上下文菜单中被点击的项目位置:

public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    int index = info.position;
}

如此建议:

Android:如何从上下文菜单中找到所点击的位置

但是我在这一行遇到了NullPointerException:

 int index = info.position;

为什么会这样呢?

编辑

我为上下文菜单注册了两个视图,如下:

button1.onClick(view v){
registerForContextMenu(v);
openContextMenu(v);
}

button2.onClick(view v){
registerForContextMenu(v);
openContextMenu(v);
}

根据v.getId()的不同,我会填充菜单。

1
可能你的菜单数组中没有任何项。 - Akram
1
你注册了上下文菜单吗? - Yahor10
我肯定有物品。关于注册,是的,我在进行,但很快就会因某些原因注销。那么这就是问题所在吗? - Archie.bpgc
但我删除了注销行。它仍然会给出相同的错误。 - Archie.bpgc
请查看此链接:https://dev59.com/GXA65IYBdhLWcg3wnQBt#3729992 - Harish
2个回答

0
你可以直接使用:

已编辑 开始

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info;
    try {
        info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    } catch (ClassCastException e) {
        // If the menu object can't be cast, logs an error.
        Log.e("MENU", "bad menuInfo", e);
        return;
    }
    position = sectionAdapter.getIndexForPosition(info.position);
    menu.setHeaderTitle("");
    String[] menuItems = { "item1","item2","item3","item4" };
    for (int i = 0; i < menuItems.length; i++) {
        menu.add(Menu.NONE, i, i, menuItems[i]);
    }
}

编辑结束

public boolean onContextItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    int position = item.getItemId();
    switch (position) 
    {

        case 0:
        break;
        .
        .
        .
        default:
        break;
    }
}

希望这能对你有所帮助。

getItemId() 返回位置?你确定吗? - Archie.bpgc
是的,我用过它...它会给你上下文菜单项的位置。 - Rushabh Patel
每次我点击时,它都会返回0的值。可能出了什么问题? - Archie.bpgc
我正在检查这一步之后的info的值:“info =(AdapterView.AdapterContextMenuInfo)menuInfo;”,它返回null。 - Archie.bpgc
我尝试了你修改过的代码。没有异常,但是在try块中我得到了null值的info。 - Archie.bpgc
显示剩余6条评论


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接