每次调用 onCreateContextMenu 并且 menuItem 返回 null

onCreateContextMenu being called every time and menuItem returning null

我遇到了一个问题,每次我长按列表视图上的项目时都会调用 onCreateContextMenu。因为它每次都被调用,所以它会覆盖我对菜单项所做的任何更改。
在我的 MainActivity 的 onCreate() 中,我有这个。

trackingList = (ListView) findViewById(R.id.trackingList);
listAdapter = new SummonerAdapter(MainActivity.this, summonerNames); 
trackingList.setAdapter(listAdapter);
registerForContextMenu(trackingList); 

在我的 onCreateContextMenu() 中

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater  = getMenuInflater();
    inflater.inflate(R.menu.list_context_menu, menu);
    this.menu = menu;
    toggle = menu.findItem(R.id.postGameNotif);
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    int listPosition = info.position -1;
    SharedPreferences prefs = getApplicationContext().getSharedPreferences("summoner_prefs", MODE_PRIVATE);
    boolean postNotif = prefs.getBoolean(summonerNames.get(listPosition) + "_postNotif",false);
    if (postNotif){
        toggle.setTitle("Disable post-game notifications");
    }
    else
        toggle.setTitle("Enable post-game notifications");
}

我的 onPrepareOptionsMenu() 是空的。
作为一个副作用,当我从另一个 class 调用 showContextMenu() 时,它将崩溃,除非我之前先长按了一个列表项。但如果我已经打开了一次上下文菜单,它将按预期工作。我发现了同样的问题 here 但似乎没有得到解决。
似乎当我从另一个 class 调用 showContextMenu() 时,它再次调用 onCreateContextMenu(),但 menuInfo 为空。

试试这个,针对您的场景,而不是为列表视图注册上下文菜单,将 onLongClickListener 添加到列表视图中的每个子视图,即重写 getView() 并向其添加侦听器,然后调用 showContextMenu() 每次触发侦听器的时间,并通过删除适配器信息来修改你的 oncreateOptions 菜单,因为如果你在 getView 中处理它,你就会很清楚它的位置。

你的位置应该是最终的,然后才能适合听众,或者你可以找到另一种方法通过你的听众传递它,通过标签或一个新的 int 变量

希望对您有所帮助