onCreateContextMenu每次都被调用,而menuItem返回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()为空
作为副作用,当我从另一个类调用showContextMenu()时,它将崩溃,除非我之前先长按了一个列表项。但是,如果我已经打开上下文菜单一次,它就会按预期工作。我在这里发现了同样的问题,但似乎没有得到解决
看起来,当我从另一个类调用showContextMenu()时,它会再次调用onCreateContextMenu(),但menuInfo为null。

尝试一下,对于您的场景,不要为您的listview注册上下文菜单,而是将onLongClickListener添加到listview中的每个子视图,即覆盖getView()并将侦听器添加到其中,并在每次触发侦听器时调用showContextMenu(),并通过删除适配器信息来修改oncreateOptions菜单,因为如果你在getView中处理它,你很清楚它的位置。

你的位置应该是最终的,然后才能放入监听器,或者你可以找到另一种方法,通过标签或新的int变量将其传递给监听器

希望它能帮助

相关内容

  • 没有找到相关文章

最新更新