Android 对话框碎片崩溃中的setRetainInstance

Android 对话框碎片崩溃中的setRetainInstance,android,android-dialogfragment,Android,Android Dialogfragment,我有一个DialogFragment附加到活动,当屏幕旋转时,活动被破坏,DialogFragment,我想保留DialogFragment,我的DialogFragment代码如下,我添加setRetainInstance(true)它将崩溃 @Override public void onCreate(Bundle savedInstanceState) { Log.d(sClassTag, "onCreate"); super.onCreate(savedInstanceS

我有一个
DialogFragment
附加到活动,当屏幕旋转时,活动被破坏,
DialogFragment
,我想保留
DialogFragment
,我的
DialogFragment
代码如下,我添加
setRetainInstance(true)它将崩溃

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.d(sClassTag, "onCreate");
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    int style = DialogFragment.STYLE_NORMAL, theme = 0;
    setStyle(style, theme);

}
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d(sClassTag, "onCreateView");
    if(mView==null){
        mView = inflater.inflate(R.layout.layout_password,container,false);
    }
    addButtonListener();
    addEdittextListener();
    return mView;
}
我这里有失事记录

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.microsoft.pdfviewertestapplication/com.microsoft.pdfviewertestapplication.MainActivity}: java.lang.IllegalStateException: DialogFragment can not be attached to a container view
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
at android.app.ActivityThread.-wrap15(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

您的活动是否扩展了
FragmentActivity
&您是否在活动的清单文件中设置了
configChanges

将父活动作为
FragmentActivity
&将片段膨胀为

DialogFragment newFragment = new Diafragment();
newFragment.show(getSupportFragmentManager(), "dialog");

我发现另一种方法是添加静态值成员,并将要保存的值记录在静态值成员中,然后在OnCudio函数中赋值< /p>我的活动扩展AppCubActudio,事实上,我在活动中创建中间片段,在中间片段创建一个DealC碎片对象,那么,我应该更改中间片段或活动的清单吗?更改中间片段的父活动能否提供一个如何修改清单的示例,我使用NewInstance创建一个DialogFragment对象并调用show函数,但当它旋转时,它将不会进入中间片段创建部分。所以我想在menifest中维护dialogFragment instancechange:你能发布activity&middle fragment的全部代码吗?我将其添加到activity mainfest中,但它不起作用,而且整个代码太多,总体逻辑是我在activity中创建一个middle fragment对象并调用其函数a,在函数A中,我创建了dialog fragment对象并调用了它的show函数B,在函数B中,我调用了show(FragmentManager,“dialog”),您可以发布从活动中调用DialogFragment的代码吗?听起来您犯了一个或多个片段陷阱。我和你有同样的问题,在阅读这篇优秀的文章时,我能够解决:。这不是一个很好的方法,如果有人有更好的解决方案,请分享,谢谢!