2012-12-14 9 views
11

私のアプリではFragmentの1つを除き、Fragmentが複数のポートレートモードのFragmentActivityを持っています。の間をフッタViewFragmentActivityに移動します。アンドロイドのフラグメントのオリエンテーションの変更を確認する場所

この特定のFragmentの向きが変更されている場合、私は別のレイアウト(実際には同じ名前だが異なるウィジェットView秒)を持っています。ランドスケープモードでは、FragmentのレイアウトViewと、FragmentActivityのフッタViewから特定のウィジェットを削除したい場合は、バックグラウンドですべてを戻します。

私はFragmentonSavedInstanceState()に必要なすべてのデータを保存しましたが、Viewを適切に復元できるように、向きの変更をテストするのが最もよい場所はどこですか?私のアンドロイドManifestにconfigChanges =「方向」:私はアンドロイドを持っていないので、私は私のFragmentであっonConfigurationChange()とテストを上書きすることができ

わかりません。

答えて

22

このチェックをonにする()。あなたのデバイスを回転させると、アプリは再開されます。したがって、アプリケーションの再起動時にonCreateが再び呼び出されます。

int currentOrientation = getResources().getConfiguration().orientation; 
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
    // Landscape 
} 
else { 
    // Portrait 
} 
+0

ありがとう。私に他のアイデアを教えてください。 – irobotxxx

+4

ポートレートビューとランドスケープビュー用に別々のxmlを作成できます。あなたの "res"フォルダに "layout-land"という名前のフォルダを作成し、そのフォルダ内の横長ビューのxmlを作成します。両方のXMLの名前を(縦と横)同じにしておきます。あなたの意見は自動的に調整されます。どちらのウィジェットもそのまま各XMLに保持してください(どちらのビューでも必要ないウィジェットの表示を "GONE"に変更するだけです)。 –

+0

ありがとう。実際には私のコメントから分かりました。私はあなたに私が他のアイデアをくれたことを意味していました。私は実際に質問としてそれを意味しませんでしたが、うれしいです。 :) – irobotxxx

7

onConfigurationChangedの機能をオーバーライドすることで、向きの変更を制御できます。

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 

     super.onConfigurationChanged(newConfig); 
     int currentOrientation = getResources().getConfiguration().orientation; 

     if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){ 
      Log.v("TAG","Landscape !!!"); 
     } 
     else { 
      Log.v("TAG","Portrait !!!"); 
     } 
    } 
関連する問題