3

私はそのようなことをしたいです。絵は言葉よりも簡単です: ここに画像の説明を入力

ユーザーがフラグメント B のボタンをクリックすると、フラグメント B は変更されましたが、A は変更されませんでした。最初のものは次のようなレイアウトを持っています

<?xml version="1.0" encoding="utf-8"?>
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.ContactsFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/contacts_fragment" />

簡単なアクティビティ呼び出しを使用して、フラグメント レイアウトにボタンがあります。

Intent intent = new Intent(getActivity(), NextActivity.class);
startActivity(intent);

そして土地のものはそのようなものです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.ContactsFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/contacts_fragment" />

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.HomeFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_container" />

</LinearLayout>

次のコードを使用して内部フラグメントを変更します。

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
NextFragment nextFrag = new NextFragment();
ft.replace(R.id.fragment_container, nextFrag);
ft.addToBackStack(null);
ft.commit();

この部分はうまく機能します。

2 つの質問があります。

  • メイン アクティビティのコンテンツを変更するこれら 2 つの方法をどのように配置しますか? つまり、メイン アクティビティでは、フラグメントは 2 番目の方法を呼び出す必要がありますが、通常のアクティビティでは、最初の方法を呼び出す必要があります。

  • フラグメント A の項目をクリックしてから、フラグメント B のボタンをクリックすると、フラグメントが NextFragment に変更されます。別のアイテムをクリックしても同じことをします。最初のユーザーに戻ることができます。新しいアイテムをクリックしたときにスタックをダンプする方法はありますか?

ご協力いただきありがとうございます。

Ps: サポート v4 ではなく、ネイティブ フラグメント ライブラリを使用しています。

4

2 に答える 2

3

あなたの 2 つの質問の詳細を理解するのに苦労しています。曖昧で十分な詳細が得られないからです。

ただし、Fragment実行時に を変更する必要があるため、レイアウト ファイルを配置しないでください。<fragment/>現在のアーキテクチャFragmentでは、レイアウトの を変更することはできません。これは、あなたが望むものではありません。

注: レイアウト XML ファイルでフラグメントを定義してアクティビティ レイアウトにフラグメントを追加する場合、実行時にフラグメントを削除することはできません。ユーザーの操作中にフラグメントをスワップインおよびスワップアウトする予定がある場合は、アクティビティの最初の開始時にフラグメントをアクティビティに追加する必要があります。

レイアウト ファイルで のFrameLayoutコンテナを使用し、コンテナが存在するかどうかに応じて、それらのコンテナに s を1 つ追加する必要があります。これにより、アプリは縦向きに 1 つ、横向きに 2 つの s を作成できます (それぞれの向きにレイアウトがある場合)。これにより、好きなように s を交換して、それらをバックスタックに追加することもできます。Fragment ActivityFragmentFrameLayoutFragmentFragmentFragment

Google が推奨するこのアプローチの例は、こちらにあります

于 2013-02-26T20:02:24.813 に答える