2012-06-02 3 views
15

FragmentTransaction.commit()の直後に呼び出されませんgoToFragmentを呼び出した直後に、私が自分の活動に保存していたものを、その中に入れます。onCreateViewは()私は活性を有する

問題は、フラグメントのonCreateViewがフラグメントが完全にレンダリングされる前に、少なくとも私の理解では呼び出されないということです。

フラグメント内のonAttach(Activity activity)をオーバーライドしていることはわかっていますが、私はそれを自分のアクティビティに具体的にキャストする必要があります。特定の活動に依存する。

私が見る限り、Fragmentにはリスナー(件名として)が実装されていません。

だから私は、私は自分のリスナー(主題と活動オブザーバーの断片を作るためにObserver Patternを使用)を作成する必要が把握した後、onCreateViewまたはonAttachが行われるたびに、それを呼び出し、そして最後にバックに呼び出しますフラグメントを設定する必要のあるデータで置き換えます。しかし、私はいくつかの断片のためにこれを行う必要があるので、私は再び悪いと思う各断片のリスナーを作る必要があります。

これを行う方法はありますか?

+2

'FragmentManager.executePendingTransactions()'についてはどうですか? –

+0

それは完璧に働いた!答えを加えて、それを受け入れられた答えとしてマークします。 –

+0

新しいフラグメントにデータを渡すには、引数を使用できます: 'Bundle args = new Bundle;/*すべてのデータを保存する*/newFragment.setArguments(args); ' –

答えて

37

FragmentTransactionは、commit()を呼び出した直後に適用されません。手動で更新を強制ことがあります。それは通常のライフサイクルだ超え

... 
mFragmentManager.executePendingTransactions(); 

私の知る限りのイベントコールバック目的はFragmentとカスタムコミュニケーションです。

+0

これは、データをフラグメントに渡す場合に便利です。フラグメントが一度だけ使用されている場合は、fragmentを使用します。setArguments(Bundle args)しかし、フラグメントを再利用しようとするとエラーになるので、executePendingTransactions()が便利なので、フラグメントのメソッド/セッターをすぐに呼び出すことができます。しかし、あまりにもエレガントに見えません。 –

4

正しい方法は、Fragmentを表示することを希望するクラスActivityのインターフェイスを定義することです。そうすれば、onAttachには、特定のActivityではなく、あなたのインターフェイスにキャストします。

は、例えば参照:http://developer.android.com/guide/topics/fundamentals/fragments.html#EventCallbacks

+0

これは少なくとも良い解決策です。それは完璧に見えないが、それはまだまともな方法のように思える。提案していただきありがとうございます。編集:あなたが投稿したリンク(公式ガイド)によると、それはお勧めの方法だと思われる。 –

+0

@Aske B .:それは確かに 'Fragment'の内部で修正しようとしています。 –

+0

これはフラグメントからアクティビティに通信する方法ですが、OPの意図はフラグメント化されていると思います。この方法を後者の場合に適用できるか? – amcc

2

あなたは値を設定するonActivityCreatedを使用する必要があります。

onCreateViewに参照を設定し、値をonActivityCreatedに設定します。

関連する問題