所以我不是一个非常有经验的Android程序员,所以请温柔地对待我:)
我正在尝试创建一个使用fragements的应用程序,并从其中一个片段中调用自定义对话框。
//create dialog
final Dialog dialog = new Dialog(getActivity());
dialog.setCancelable(false);
dialog.setContentView(R.layout.fragment_update_dialog);
//set up data in dialog here
Button bUpdate = (Button) dialog.findViewById(R.id.bDialogUpdate);
bUpdate.setOnClickListener(new OnClickListener()
{
//define onclick listener code here
});
dialog.show();
此代码工作正常,我没有任何问题。但是当屏幕方向改变时,我的对话框就会消失。
现在我已经阅读了这个论坛和其他地方的几篇帖子,所以我理解为什么会这样,但我找不到解决方案来阻止它。
我尝试过使用清单文件的'技巧',但它不起作用。 (也许是因为它在片段而不是活动中?)
我的清单文件包含;
<activity
android:name="com.mycompany.myapp.MainActivity"
android:configChanges="keyboardHidden|orientation"
....
在我的主要活动中我有
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_main);
}
但这不起作用。
我也看到很多评论说这不是推荐,但看不出如何解决这个问题。
感谢您的帮助
答案 0 :(得分:13)
尝试使用DialogFragment代替。方向更改后重新启动。您需要扩展此类,如文档中所示,并使用它来显示对话框。
答案 1 :(得分:11)
在API 13之前,configChanges属性有一个新值,screenSize
因此,如果您使用的是大屏幕,请确保在configChanges属性中添加screenSize:
android:configChanges="orientation|keyboardHidden|screenSize"
<强>即强>
<activity
android:name=".MyMainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name" >
答案 2 :(得分:0)
偶然地,我找到了一种在设备方向更改时使对话框继续存在的方法。
这是C#xamarin代码,但我相信它也可以很容易地适应Java。
private void MakeDialogPersist(Dialog dialog)
{
WindowManagerLayoutParams wmlp = new WindowManagerLayoutParams();
wmlp.CopyFrom(dialog.Window.Attributes);
dialog.Window.Attributes = wmlp;
}
我在执行dialog.Show();之后运行此方法