44

左と右の 2 つの異なる部分で構成される大画面用のレイアウトを作成しています。そのためには、2 Fragments を使用するのが正しい選択だと思いました。

次に、 Master/Detail-Flowを使用したナビゲーションの例を確認しました。2 ペインのレイアウトで、右側がナビゲーション、左側が詳細ビューです。

しかし、その例では、私が期待していたものとは異なり、詳細ビューには、直接の代わりに , をFrameLayout保持するがあります。FragmentFragment

レイアウト XML は次のようになります (例)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:baselineAligned="false"
    android:divider="?android:attr/dividerHorizontal"
    android:orientation="horizontal"
    android:showDividers="middle"
    tools:context=".WorkStationListActivity" >

    <fragment
        android:id="@+id/workstation_list"
        android:name="de.tuhh.ipmt.ialp.history.WorkStationListFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@android:layout/list_content" />

    <FrameLayout
        android:id="@+id/workstation_detail_container"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3" />

</LinearLayout>

私の質問は次のとおりです。詳細ビューに 自体ではFrameLayoutなく が使用されるのはなぜですか? Fragment理由やメリットは?私も使うべきですか?

4

2 に答える 2

39

詳細コンテナーは、表示される がのメソッドを使用して置き換えられるFrameLayoutためです。FragmentFragmentTransactionreplace()

の最初の引数replace()は、フラグメントが置き換えられるコンテナーの ID です。この例の FrameLayout が Fragment に置き換えられた場合、WorkStationListFragment現在表示されているすべての詳細 Fragment が新しい Fragment に置き換えられます。Fragment を FrameLayout 内にカプセル化することで、詳細のみを置き換えることができます。

于 2013-10-18T15:47:09.943 に答える
5

フラグメント タグ: XML 経由でフラグメントをすぐに読み込むために使用できますが、transaction.replace() メソッドで置き換えることはできません。名前またはクラス プロパティでフラグメントをロードできます。

FrameLayout タグ:プログラムによってのみフラグメントを読み込むことができ、フラグメントは transaction.replace() メソッドで置き換えることもできます。FragmentTransction でフラグメントを追加/置換できます。

FragmentContainerView タグ: FragmentContainerView は FrameLayout の子であり、フラグメントをロードするのに最も推奨されるビューです。フラグメント タグのプロパティ (名前とクラス) をサポートしているため、フラグメントは XML からロードできますが、フラグメント タグとは異なり、フラグメントはトランザクションで置き換えることができます。交換()。これは FrameLayout の子であることがわかっているため、FrameLayout のすべての機能をサポートしているため、FrameLayout の場合と同じようにフラグメントを追加できます。

また、FrameLayout のアニメーション関連の問題は、FragmentCotainerView で解決されています。

以前は、フラグメントの開始アニメーションと終了アニメーションをカスタマイズしようとすると、画面から完全に出るまで、入るフラグメントが出るフラグメントの下にあるという問題が発生していました。これにより、フラグメント間を遷移するときに不快な (そして誤った) アニメーションが発生しました。

このリンクを確認してください。

于 2020-02-03T06:16:48.027 に答える