2017-02-10 62 views
1

我有一個DialogFragment連接到活動中,並且當屏幕旋轉時,活動被破壞,這樣做的DialogFragment,我想保留DialogFragment和我DialogFragment代碼如下,我添加setRetainInstance(true);它會崩潰setRetainInstance在DialogFragment崩潰

@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) 
+0

你能後的代碼你從Activity中調用DialogFragment? –

+0

聽起來像你倒下了許多碎片陷阱。我遇到了同樣的問題,我可以通過閱讀這篇優秀的文章來解決這個問題:http://code.hootsuite.com/orientation-changes-on-android/。 –

回答

1

是您的活動來延長片段活動&是否設置configCha在Manifest文件中是否有活動?

Take parent activity as FragmentActivity & inflate fragment as 

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

我的活動擴展了AppCompatActivity,實際上我在活動中創建了一箇中間片段,而在中間片段中我創建了dialogFragment對象,那麼我應該爲中間片段還是活動更改Manifest? – newszer

+0

更改清單中片段的父活動性 –

+0

您可以舉一個如何修改清單的示例,我使用newInstace創建一個DialogFragment對象並調用show函數,但當它旋轉時,它將不會進入中間Fragment創建部分。所以我要保持menifest的dialogFragment實例 – newszer

0

我找到另一種方式是添加一個靜態值成員,並記錄你想在的newInstance保存到靜態值成員的值,然後在的onCreate功能做分配

+0

這不是一個很好的方法,如果有人有更好的解決方案請分享一下,謝謝! – newszer

相關問題