0

我正在尝试将已显示的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 线程中运行。

我猜ContextMenu在 2.3 中是使用ListView相应的 `ListAdapter. 在 ICS 中,不会抛出此异常,并且该项目按照我的计划变得不可见。

有人知道如何在 2.3 上执行此操作吗?

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

4

1 回答 1

0

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

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

// ... 做一点事

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

}

于 2013-01-17T12:59:31.173 回答