更改Android ContextMenu项目(ICS前)

时间:2013-01-17 10:04:54

标签: 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: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(16908823, class com.android.internal.app.AlertController$RecycleListView) with Adapter(class com.android.internal.view.menu.MenuBuilder$MenuAdapter)]

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

我想2.3中的ContextMenu是使用ListView实现的,并且由相应的`ListAdapterv进行了黑化。 在ICS中,不会抛出此异常,并且该项目在我计划中变得不可见。

任何人都有想法如何在2.3上做到这一点?

一种解决方法是不通过ContextMenu模仿Dialog,但我宁愿坚持ContextMenu

1 个答案:

答案 0 :(得分:0)

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

public boolean onContextItemSelected(MenuItem item){     AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

// ...做点什么

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

}