我创建了一个弹出窗口,其中包含月视图以选择日期。当我更改方向时,由于Android重新加载整个活动,我的弹出窗口会消失。如何使其在运行时发生方向变化时仍然保持打开状态?
我创建了一个弹出窗口,其中包含月视图以选择日期。当我更改方向时,由于Android重新加载整个活动,我的弹出窗口会消失。如何使其在运行时发生方向变化时仍然保持打开状态?
android:configChanges="orientation"
,以便在显示窗口的活动中处理方向更改。这样做告诉Android您将自行处理方向更改,并最终不会销毁您的活动并保持窗口显示。@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
Log.i("orientation", "Orientation changed to: Landscape");
else
Log.i("orientation", "Orientation changed to: Portrait");
}
为了预览,请下载并安装此示例应用程序。
android:configChanges="orientation"
。我相信,您一定是在做其他错误的事情,这会导致屏幕方向变化时重新创建显示。 - waqaslamonDestroy()
)然后重新启动它(调用onCreate()
)。
一旦你的弹出窗口出现,就设置一个标志popup_open=1
。你的弹出窗口自然会有一个关闭按钮。在此按钮的单击处理程序中将标志设置为0。然后你可以在方法onRestoreInstanceState()
或onCreate()
中重新打开弹出窗口。在这里,你需要检查标志的状态。如果标志被设置为1,则呈现弹出窗口。因此,即使在弹出窗口出现时改变了屏幕方向,onRestoreInstanceState()
将根据标志的状态知道该怎么做。
更多参考内容请查看:如何处理运行时更改。popup_open=0
。在启动弹出窗口时立即设置 popup_open=1
。因此,如果弹出窗口已打开并且方向发生更改,则标志不会被设置为 0,因此 onRestoreInstanceState()
应该可以解决所有问题。我将编辑我的答案以处理在弹出窗口中设置标志,而不是由 onSaveInstanceState 进行设置。 - UrbanOnClick()
方法中设置标志。之前我建议在 onSaveInstanceState
中设置标志。 - UrbanonRestoreInstanceState()
或onCreate()
中检查值。请查看我答案中提供的链接。 - Urbanandroid:configChanges="orientation|keyboard"
应该这样就可以了。
显示弹出窗口
final View parent = findViewById(R.id.{parentId});
parent.post(new Runnable() {
@Override
public void run() {
mPopup.showAtLocation(parent, ...);
}
});
解决屏幕方向变化时未处理的异常