-1

こんにちは、これを明確にしようとしています:もし私が縦向きレイアウト用にこのレイアウトを持っているなら

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <fragment
        android:id="@+id/configFragment_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.settingsFragment">
</fragment>

これはランドスケープ用(主にタブレット用)、main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <fragment
        android:id="@+id/configFragment_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.SettingsFragment" ></fragment>

        <fragment
        android:id="@+id/detailFragment_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.Example.DetailFragment" >
        <!-- Preview: layout=@layout/details -->
    </fragment>

</LinearLayout>

SettingFragment 内に、DetailFragment に移動するボタンを実装します。

DetailFragment fragment = (DetailFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.detailFragment_id);
            FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
            if (fragment != null && fragment.isInLayout()) {
                DetailFragment detailfragment = new WallpaperFragment();
                fragmentTransaction.add(R.id.detailFragment_id, detailfragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            }else{
                Intent intent = new Intent(getActivity().getApplicationContext(),DetailActivity.class);
                startActivity(intent);
            }

現在動的フラグメントを実装していますか、それともまだ静的フラグメントを使用していますか?..または、フラグメントタグ要素の代わりに FrameLayout のようなビューグループを使用する場合にのみ動的フラグメントを使用しますか?

電話には単一のペインを、タブレットには複数のペインを用意するというアイデアがあります。静的フラグメントと動的フラグメントを混在させるのは悪い考えだとは思いますが、ややこしいです。ありがとうございました。

4

2 に答える 2

0

ここで間違っている可能性があります(お気軽に訂正してください)が、静的フラグメントと動的フラグメントの両方を使用しているようです。XML レイアウトでフラグメントを追加した後、アクティビティのフラグメント トランザクションを介してフラグメントを再インスタンス化しています。または、XML でフラグメントの代わりにコンテナー (たとえば、FrameLayout) を宣言した場合は、実行時に FragmentTransaction を使用してフラグメントを追加する必要があります。

あなたの例では、すべての準備ができているフラグメントを踏んでいます。基本的に、OS はインフレート時に XML 内のフラグメントを認識し (それがフラグメント コードを呼び出すときだと思いますか?)、フラグメント内のタグを介してそれに関連付けられたコードを実行します。次に、アプリは同じフラグメントを自分自身の上に追加します。これを示す簡単な方法は、Fragment クラスの onCreateView メソッドに LogCat 呼び出しを追加することです。複数回表示される場合は、同じフラグメントで前のフラグメントを踏んでいます (99% 確信しています)。これがあなたの質問に答えるのに役立つことを願っています!

于 2012-07-06T18:40:37.040 に答える