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 スレッドで実行されます。

ContextMenu2.3 ではListView対応する `ListAdapterv . ICS では、この例外はスローされず、計画どおりアイテムは非表示になります。

2.3でそれを行う方法を知っている人はいますか?

ContextMenu1 つの回避策は、を介してエミュレートしないことですDialogが、むしろ固執したいと思いますContextMenu

4

1 に答える 1

0

次の方法で、Menu アダプターの取得を試すことができます。

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

// ... 何かをする

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

}

于 2013-01-17T12:59:31.173 に答える