1. ホーム
  2. アンドロイド

[解決済み】Fragmentが自分自身を削除する、つまりfinish()に相当するものを取得するにはどうすればよいですか?)

2022-04-02 04:17:06

質問

互換性ライブラリを使用して、アプリをフラグメント使用に変換しています。 現在、いくつかのアクティビティ(A B C D)があり、互いに連鎖しています。Dにはボタン「OK」があり、押されるとfinishが呼び出され、それが onActivityResult() でCとBを追加で破壊しています。

私のHonycomb以前のフラグメントバージョンでは、各アクティビティは事実上フラグメントAf Bf Cf Dfのラッパーになっています。すべてのアクティビティは startActivityForResult()onActivityResult() は、それぞれのフラグメントの中で、喜んで getActivity().finish()

しかし、私が抱えている問題は、私のハニカムバージョンでは、1つのアクティビティであるAしかなく、フラグメントBf、Cf、Dfが FragmentManager .

わからないのは、フラグメントDf、Cf、Bfを削除するために「OK」が押されたときにDfで何をすればいいのか?

フラグメントがスタックから自分自身を飛び出すようにしてみましたが、これは例外が発生しました。 onActivityResult() を使用してフラグメントをロードしていないので、無駄です。 startActivityForResult() .

これは完全に間違った考え方なのでしょうか?トランザクションマネージャを使用してポップするために、親フラグメントまたはアクティビティと通信するリスナーのようなものを実装する必要がありますか?

解決方法は?

<ブロッククオート

フラグメントDf,Cf,Bfを削除するために、Dfで'OK'を押したときに何をすればいいのかがわからないのですが。

ステップ#1:DfがDに、アクティビティ自体、またはアクティビティによって提供されるインターフェースインスタンスのメソッドを呼び出すことによって、quot;yo!

ステップ2: Dにフラグメントを削除させるには FragmentManager .

ホストアクティビティ(D)は、他のフラグメントがアクティビティにあるか(他のアクティビティにあるのに対して)を知っているものです。したがって、フラグメントの組み合わせに影響を与える可能性のあるフラグメント内のイベントは、アクティビティに伝搬されるべきであり、アクティビティは適切なオーケストレーションの動きをします。