0

こんにちは、ビュー ページャーとフラグメントを使用しています。向きが変わるたびに onCreateView メソッドが実行されないように、向きの変更をオーバーライドしたいと思います。これは、アプリの onCreateView で多くのことが実行されているため、向きの変更が遅くなるためです。また、サーバー上のものもチェックされますが、向きが変わったからといってすべてが実行される理由はありません。

これが私がこれまでに設定したものです

マニフェストの MainActivity にこれがあります

 android:configChanges="orientation|keyboardHidden"

そして、私はこれをフラグメントで使用しています

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

アプリを実行して向きを切り替えると、トーストが表示されますが、レイアウトが横向きに変わることはありません。だから私はおそらくAndroidが横向きであることを認識していなかったのではないかと判断しました.その結果、レイアウトを膨らませる方法に問題があることがわかりました。

ビューページャーで向きが変更されたときにレイアウトを変更する際の助けをいただければ幸いです。

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

4

1 に答える 1

2

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

<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() を使用して、必要なすべての場所でフラグメントが正しくインスタンス化されるようにすることができます。

私のアプリケーションが実際にどのように機能するかのように、フラグメント内にフラグメントをロードしようとしている場合は、このコードを少しマッサージすることができます。考えられるいくつかのビューのいずれかをインフレートするフラグメントがある場合は、if ステートメントを使用して適切なフレーム ID を選択し、一意の FRAG_TAG を指定します。フラグメント用に作成する FrameLayout ごとに個別の R.id を使用することをお勧めします。(たとえば、この Fragment が Info、Hum、および Lyrics の異なるビューをインフレートする可能性がある場合、各マイク フラグメントのタグ名はMetaMicButtonHumMicButton、およびLyricsMicButtonになります。R.id.meta_mic_button_frame と 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画面サイズ、言語、ドック モード、ナイト モード、およびそれらの任意の組み合わせに基づいて、さまざまなレイアウトを定義できます。 .

于 2011-12-28T18:34:08.020 に答える