2011-10-17 14 views
0

こんにちは私はビューページャーとフラグメントで作業しています。オリエンテーションの変更をオーバーライドして、オリエンテーションが変更されるたびにonCreateViewメソッドが実行されないようにしたいと思います。これは、たくさんのアプリケーションがonCreateViewで実行され、向きが変わるのが遅くなるためです。私のサーバ上のものもチェックされ、何もないので、向きが変わっただけですべてが動く理由は全くありません。ここで Android Fragment Inflate layout

は、これまで

私はマニフェスト

android:configChanges="orientation|keyboardHidden" 

にMainActivity上でこれを持っているし、私は私のフラグメントでこれを使用しています私が設定したものです

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false); 
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show(); 
} 

私はアプリを実行し、方向を切り替える私はトーストショーが表示されますが、レイアウトは決して風景の1に変更されます。だから、アンドロイドは、私がそれを上書きしてからランドスケープになっていることを認識していないかもしれないと決めたのですが、ダイアログをレイアウトのように変えても、強制的に閉じることはありません。結果として、私はレイアウトを膨張させる方法に何か問題があることを知っています。

ビューアビューアで向きが変更されたときにレイアウトを変更する際の助けがあれば、大歓迎です。

ありがとうございました!

答えて

2

1)onCreateView()ではなく、Fragment onCreate()にすべてのサーバーチェックルーチンおよびその他の1回限りの操作を入れる必要があります。ロード中に何らかの種類の「読み込み中...」画面を表示する必要がある場合は、FragmentActivityを使用して、「読み込み中...」タイプを含むFrameLayoutのレイアウトを少なくとも拡張することをお勧めしますグラフィック。最初に、FragmentActivityはonCreate()を実行します。このビューでは、最初に最初のビューを展開してから、そのフラグメントをインスタンス化します。サーバーチェックコードをFragmentのonCreate()に入れ、そのonCreateView()メソッドでこのFragmentのViewを展開します。

<FrameLayout 
     android:id="@+id/recorder_mic_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

その後、マイクフラグメントが実際に次のJavaコードによってインスタンス化されています:

// make the Mic button 
FragmentManager fragMgr = getFragmentManager(); 
FragmentTransaction xact = fragMgr.beginTransaction(); 
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) { 
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit(); 
} 

FRAG_TAGがある。ここは本当に断片であるマイクボタンを初期化し、私のプロジェクトの一つからのサンプルが、です実際にはフラグメントのR.idとは異なるフラグメントインスタンスに与える一意のタグ名です。このようにして、findFragmentByTag()を使用して、フラグメントが必要なすべての場所で正しくインスタンス化されるようにすることができます。

私のアプリケーションが実際にどのように動作するかのように、フラグメント内にフラグメントをロードする場合は、このコードを少しマッサージできます。いくつかのビューのうちの1つを膨らませるフラグメントがある場合は、ifステートメントを使用して適切なフレームIDを選択し、固有のFRAG_TAGを指定します。フラグメント用に作成したFrameLayoutごとに異なるR.idを使用することをお勧めします。 (例えば、このフラグメントは、その後、各マイクのフラグメントのための私のタグ名がLyricsMicButton HumMicButton、およびMetaMicButtonだろう情報、ハム、そして歌詞のためのさまざまなビューを膨らませる可能性がある場合。私はまたの間で選択する必要があるだろうR.id.meta_mic_button_frameなど。)

2)縦と横のモードを切り替えるときは、フォルダres/layoutとres/layout_landに異なるXMLレイアウトを定義する必要があります。 (または、横長モードをデフォルトと見なす場合は、res/layoutとres/layout_portを作成できます)。このリンクを確認してください:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources画面サイズ、言語、ドックモード、夜間モード、およびそれらの任意の組み合わせに基づいて、異なるレイアウトを定義できます。