2016-06-20 5 views
0

私は、プロジェクトで2つの異なるフラグメントを表示するためにonConfigurationChanged関数を使用していますが、アプリケーションが最初の位置(横または縦)で実行されているときに、私は再びそれを変更アプリケーションがクラッシュした。 ここに私のコードです:なぜonConfigurationChanged関数を使用するとアプリケーションがクラッシュするのですか?

FragmentManager  fragmentmanager  = getFragmentManager(); 
FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction(); 


@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Fragment1 fragment1 = new Fragment1(); 
     fragmentTransaction.replace(android.R.id.content, fragment1); 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Fragment2 fragment2 = new Fragment2(); 
     fragmentTransaction.replace(android.R.id.content, fragment2); 
    } 
    fragmentTransaction.commit(); 
} 

どうすればいいですか?

+0

どのような例外が表示されていますか? –

+0

例外のログを入れてください – Amir

+0

そして、私はあなたが前の断片を削除してはいけないと思います。これは例外の原因です。 – Amir

答えて

0

まず、マニフェストのアクティビティにandroid:configChangesという属性が宣言されていることを確認してください。

実行時に構成変更が発生すると、アクティビティはシャットダウンされ、デフォルトで再起動されますが、この属性を持つ構成を宣言すると、アクティビティが再開されません。代わりに、アクティビティは実行されたままで、onConfigurationChanged()メソッドが呼び出されます。

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

第二に、あなたはそれ以来onConfigurationChanged前にトランザクションを適用する必要があります。

は、このように、あなたが自分で設定変更を処理しようとしていることを知っているあなたの活動をするためにマニフェスト属性を宣言する必要があります起動時に呼び出されない - アプリケーションの開始時に何も表示されない理由。最後に

は、ガベージコレクションの後にnullポインタ例外を避けるためにOnConfigurationChange()の内側の線FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();

を置きます。

+0

FragmentManagerのfragmentmanager = getFragmentManager()を使用していたことに感謝します。 FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();機能が不十分ですが、実行中のアプリケーションの最初にフラグメントが表示されないという問題があります。最初の起動時に – zahraMHD

+0

がポートレートか風景かを確認してから取引を適用します –

関連する問題