我的活动中有一个弹出窗口。
每当我将屏幕方向更改为横向时,弹出窗口就会消失。
为什么会这样,以及如何保持弹出窗口可见?
答案 0 :(得分:0)
尝试以下代码: -
@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");
}
请参阅以下链接了解更多信息: -
How to keep Popup window opened when orientation changes at run time in Android?
答案 1 :(得分:0)
当方向改变时,活动将重新启动..所以通常弹出窗口再次调用..无论如何,如果它消失,尝试在onCreate中调用它。
或检查方向更改并进行必要的召回。
if(getResources().getConfiguration().orientation == getResources()
.getConfiguration().ORIENTATION_LANDSCAPE){
// put some flag
}else if(getResources().getConfiguration().orientation != getResources()
.getConfiguration().ORIENTATION_PORTRAIT) {
// change the flag
}
如果您放置代码片段,我可以帮助您
答案 2 :(得分:0)
您需要使用托管对话框。而不是
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.rule_edit_choose_action));
builder.setAdapter(new ArrayAdapter(this, R.array.dummyValues), null);
builder.show();
你应该使用像
这样的东西myActivity.showDialog(0);
然后在Activity中实现onCreateDialog()。然后,您的活动将管理对话框,并在您重新定位并重新关闭时重新显示该对话框。如果您需要在每次显示时更改对话框,请同时实现onPrepareDialog() - 活动将使您在显示对话框之前对其进行访问,以便您可以更新它(例如,使用自定义消息)。 p>
这里有很多信息:
http://developer.android.com/guide/topics/ui/dialogs.html
正如@Ciril所说,你的问题是当你重新定位你的Activity时会重新启动。如果适合您的应用,您可以随时将您的活动方向修改为纵向或横向。这会阻止它重新启动。
答案 3 :(得分:0)
您最有可能使用AlertDialog
作为弹出窗口,其中包括:
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.popup_title);
builder.setMessage(R.string.popup_message);
builder.setPositiveButton(R.string.yes, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do something
}
});
builder.show();
这很糟糕,因为你的Activity
不知道有一个弹出对话框,当你改变屏幕方向时,Activity
会重新启动新参数,你的弹出窗口就消失了。
要避免这种情况,最好使用ShowDialog()
来显示弹出窗口。为了使其有效,您需要覆盖onCreateDialog()
:
// Called to create a dialog to be shown.
@Override
protected Dialog onCreateDialog(int id, Bundle bundle) {
switch (id) {
case NEW_DIALOG :
return new AlertDialog.Builder(this)
.setTitle(R.string.popup_title)
.setMessage(R.string.popup_message)
.setPositiveButton(android.R.string.ok, null)
.create();
default:
return null;
}
}
然后你最好覆盖onPrepareDialog()
(实际上这不是必需的):
// If a dialog has already been created, this is called
// to reset the dialog before showing it a 2nd time. Optional.
@Override
protected void onPrepareDialog(int id, Dialog dialog, final Bundle bundle) {
AlertDialog dlg = (AlertDialog) dialog;
switch (id) {
case NEW_DIALOG :
dlg.SetTitle("popup title");
// and maybe something else
}
}
在完成所有准备工作后,您可以致电ShowDialog(NEW_DIALOG)
,并且您的活动会记住它顶部有一个弹出窗口,并会在方向更改后重新创建。