4

所以我不是一个很有经验的Android程序员,所以请对我温柔:)

我正在尝试创建一个使用片段的应用程序,并从其中一个片段中调用自定义对话框。

//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);
}

但这不起作用。

我也看到很多评论说这个不推荐,但看不到如何解决这个问题。

谢谢你的帮助

4

3 回答 3

13

尝试改用DialogFragment。它在方向更改后重新启动。您需要按照文档所示扩展此类,并使用它来显示对话框。

于 2013-05-17T10:07:59.660 回答
11

在 API 13 之前,configChanges 属性有一个新值 screenSize

因此,如果您使用大屏幕,请确保在 configChanges 属性中添加 screenSize:

android:configChanges="orientation|keyboardHidden|screenSize"

IE

<activity
    android:name=".MyMainActivity"
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:label="@string/app_name" >

参考

于 2013-05-17T09:44:40.573 回答
0

偶然地,我找到了一种在设备方向更改时使您的对话框持续存在的方法。

这是 C# xamarin 代码,但我相信它也可以很容易地适应 java。

    private void MakeDialogPersist(Dialog dialog)
    {
        WindowManagerLayoutParams wmlp = new WindowManagerLayoutParams();
        wmlp.CopyFrom(dialog.Window.Attributes);
        dialog.Window.Attributes = wmlp;
    }

我在执行 dialog.Show(); 后运行此方法;

于 2018-10-25T07:03:06.963 回答