1. ホーム
  2. android

[解決済み] add()、replace()、addToBackStack()の相違点

2022-02-14 18:28:02

質問

これらのメソッドを呼び出す際の主な違いは何ですか。

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);

既にあるフラグメントを置き換えることと、フラグメントをアクティビティ状態に追加すること、アクティビティをバックスタックに追加することとはどういう意味ですか?

次に findFragmentByTag() で追加されたタグを検索するのでしょうか? add() / replace() メソッドまたは addToBackStack() というメソッドがあるのでしょうか?

どのように解決するのですか?

1) fragmentTransaction.addToBackStack(str);

説明 - このトランザクションをバックスタックに追加する。これは、トランザクションがコミットされた後に記憶され、後でスタックからポップされたときにその操作を逆転させることを意味します。

2) fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

説明 - コンテナに追加された既存のフラグメントを置き換える。これは基本的に、同じ containerViewId で追加された現在追加されているすべてのフラグメントに対して remove(Fragment) を呼び出し、ここで与えられた同じ引数で add(int, Fragment, String) を呼び出すのと同じです。

3) fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

説明 - フラグメントをアクティビティ状態に追加する。このフラグメントは、オプションでそのビューを(Fragment.onCreateViewが非NULLを返す場合)アクティビティのコンテナビューにすることもできます。

<ブロッククオート

既存のフラグメントを置き換えるとはどういうことか、そして フラグメントをアクティビティ状態に追加し、アクティビティを背面に追加する。 スタック ?

実行状態にあるすべてのアクティビティが保管されているスタックがあります。フラグメントは、アクティビティに属します。だから、アクティビティに埋め込むために追加することができる。

1つのアクティビティに複数のフラグメントを組み合わせて、マルチペインのUIを構築したり、複数のアクティビティでフラグメントを再利用したりすることができます。これは、フラグメントコンテナを異なるレイアウトで定義している場合に、本質的に便利です。どのレイアウトでも、他のフラグメントに置き換えるだけでよいのです。

現在のレイアウトに移動すると、そのコンテナのIDが表示され、必要なフラグメントに置き換えることができます。

また、backStack 内の前のフラグメントに戻るには popBackStack() メソッドを使用します。そのためには、スタック内のそのフラグメントを addToBackStack() で、次に commit() を反映させます。これはカレントが上になるように逆順になります。

findFragmentByTag は、add/replace によって追加されたタグを検索します。 メソッドか、addToBackStack メソッドか?

タグをどのように追加したかによります。XMLから読み込んだり、トランザクションで追加されたときに定義したタグを使用してフラグメントを見つけます。

参考文献 フラグメントトランザクション