在显示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()尚未调用,将显示菜单,然后我试图使其中一个项目消失