2017-02-10 3 views
1

私が活動に添付DialogFragmentを持っている、とすると、画面が回転すると、アクティビティが破壊されたので、私はDialogFragmentを保持し、私のDialogFragmentコードたいDialogFragmentは、以下のようにしているん、私はsetRetainInstance(true);それを追加setRetainInstance

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

あなたは、コード内を投稿することができませんですあなたはアクティビティからDialogFragmentを呼び出しますか? –

+0

あなたが1つの多くの断片の落とし穴に倒れたような音。私はあなたと同じ問題を抱えていました。この優れた記事http://code.hootsuite.com/orientation-changes-on-android/で読書しながら修正することができました。 –

答えて

1

があなたの活動で、私はここにクラッシュログを取得

@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; 
} 

をクラッシュすること&はあなたがconfigChaを設定しているフラグメントの活動を拡張しますアクティビティのマニフェストファイルにnges?

Take parent activity as FragmentActivity & inflate fragment as 

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

私のアクティビティはAppCompatActivityを継承しています。実際にはアクティビティで中間のフラグメントを作成し、中間のフラグメントではdialogFragmentオブジェクトを作成しますので、中間フラグメントまたは活性のためにマニフェストを変更する必要がありますか? – newszer

+0

menifestのフラグメントの親アクティビティを変更する –

+0

マニフェストを変更する方法のサンプルを与えることができますか?DialogFragmentオブジェクトを作成してshow関数を呼び出すためにnewInstaceを使用しますが、回転するときにはFragmentを生成しません。だから私はmenifestでdialogFragmentインスタンス – newszer

0

私が見つける別の方法は、静的な値のメンバを追加し、静的な値メンバーにのnewInstanceに保存したい値を記録し、その後のonCreate機能に割り当て

+0

これは非常に良い方法ではない、誰かがより良い解決策を持っていれば、それを共有してください、ありがとう! – newszer

関連する問題