Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在显示Android上下文菜单项时更改它们(ICS之前)_Android_Android 2.3 Gingerbread_Android Contextmenu - Fatal编程技术网

在显示Android上下文菜单项时更改它们(ICS之前)

在显示Android上下文菜单项时更改它们(ICS之前),android,android-2.3-gingerbread,android-contextmenu,Android,Android 2.3 Gingerbread,Android Contextmenu,我试图将ContextMenu项设置为不可见(item.setVisible(false)),而该项已经显示(在onCreateContextMenu()过程中将对菜单的引用保存为成员) 在2.3上执行此操作时,我遇到异常: 01-17 09:54:42.563:E/AndroidRuntime(2494):java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程修改的,而是仅从UI线程修改的。[在带有适配器

我试图将
ContextMenu
项设置为不可见(
item.setVisible(false)
),而该项已经显示(在
onCreateContextMenu()过程中将对菜单的引用保存为成员)

在2.3上执行此操作时,我遇到异常:

01-17 09:54:42.563:E/AndroidRuntime(2494):java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程修改的,而是仅从UI线程修改的。[在带有适配器(class com.android.internal.view.menu.MenuBuilder$MenuAdapter)的ListView(16908823,class com.android.internal.app.AlertController$RecycleListView)中]

当然,我所有的代码都是在UI线程中运行的

我猜2.3中的
ContextMenu
是使用
ListView
实现的,并被相应的'ListAdapterv'涂黑。 在ICS中,不会引发此异常,并且该项将按照我的计划变得不可见

有人知道如何在2.3上实现吗


一种解决方法不是通过
对话框模拟
上下文菜单
,而是我宁愿坚持使用
上下文菜单

,您可以通过以下方式尝试获取菜单适配器:

公共布尔值onContextItemSelected(MenuItem项){ AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)项。getMenuInfo()

//…做点什么

    adapter.notifyDataSetChanged();
}
return super.onContextItemSelected(item);    
}

onContextItemSelected()尚未调用,将显示菜单,然后我试图使其中一个项目消失