Android 在屏幕旋转后保持上下文菜单

Android 在屏幕旋转后保持上下文菜单,android,contextmenu,Android,Contextmenu,我有一个活动,它在onCreate方法上执行: registerForContextMenu(视图) 在onCreateContextMenu中: super.onCreateContextMenu(menu, v, menuInfo); menu.add(blablabla); 这很好,但问题是当屏幕旋转时,上下文菜单消失了。 如何解决这个问题 谢谢你的阅读 我可能错了,但据我所知,您无法坚持,但是(这是我可能错的部分),您可以在旋转后动态打开菜单。给人持久的错觉。以下是解决方案: cont

我有一个活动,它在onCreate方法上执行:

registerForContextMenu(视图)

在onCreateContextMenu中:

super.onCreateContextMenu(menu, v, menuInfo);
menu.add(blablabla);
这很好,但问题是当屏幕旋转时,上下文菜单消失了。 如何解决这个问题


谢谢你的阅读

我可能错了,但据我所知,您无法坚持,但是(这是我可能错的部分),您可以在旋转后动态打开菜单。给人持久的错觉。

以下是解决方案:

contextMenu消失了,因为在默认情况下,当旋转android调用destroy()和onCreate()时,但是

如果你不想让Android通过正常的活动销毁和重建过程;相反,如果希望自己处理视图的重新创建,可以在AndroidManifest.xml中的元素上使用android:configChanges属性

<activity
    android:name=".SmsPopupActivity"
    android:theme="@android:style/Theme.Dialog"
    android:launchMode="singleTask"
    android:configChanges="orientation|keyboardHidden"
    android:taskAffinity="net.everythingandroid.smspopup.popup">
</activity>


  • 根据Android开发者博客:

    Activity类有一个名为OnRetainonConfiguration Instance()的特殊方法。这 方法可用于传递 任意的对象你未来的自我和 Android足够聪明,可以称之为 方法仅在需要时使用。[...] 可对实施情况进行总结 像这样:

    在新活动的onCreate()中, 你要做的就是得到你的目标 回来就是打电话 GetLastNonConfiguration实例()。在里面 Photostream,调用此方法 如果返回的值不为null, 网格将加载以下列表: 上一次活动的照片:


    我试过了。有一个名为openContextMenu(view)的方法,但无法使其工作:(这可能很明显,但只是出于理智,您是否仅在调用视图上的registerForContextMenu后才调用openContextMenu?是的。尝试在onCreate和onResume上调用它,但都失败了:(模拟按下菜单键怎么样?啊,我很抱歉,我以为这是普通菜单。在这种情况下,它会改变一切。嗯,让我用我的应用程序做一些谷歌搜索并测试一下,看看能找到什么。)
    @Override public Object
    onRetainNonConfigurationInstance() {
    final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos];
    keepPhotos(list);
    return list; }