1

親愛なる開発者の皆様へ

Fragment の onCreate() メソッドと Activity のメソッドとの関係は、まだ明確ではありません。このようなアクティビティにフラグメントを添付しています。

//happens in the Activity:
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    FragmentManager fragMan = this.getSupportFragmentManager();
    Fragment dataModelFragment = fragMan.findFragmentByTag("data_model");
    if (dataModelFragment == null) {
        dataModelFragment = new DataModelFragment();
        fragMan.beginTransaction().add(dataModelFragment,"data_model").commit();
    }
    System.out.println("Executing Activity.onCreate()");
}

私のフラグメントの onCreate() には、正確にいつ実行されるかをテストする目的で Sysout.println() があります。私が不思議に思うのは、フラグメントの onCreate() が呼び出される前に、アクティビティの onCreate が最初に実行を終了するのはなぜですか? 上記のコードに示されている Sysout.println が実際には、フラグメントの onCreate() にある他の Sysout.println の前に実行されます。フラグメント トランザクションを介してアクティビティに追加する前に、フラグメントの onCreate() が実行されることを期待します。それはそれが機能するはずの方法ですか?または、コミット()メソッドがすぐに実行されず、フラグメントトランザクションがキューにのみ配置されるというドキュメントで読んだ問題ですか?

私が達成したいのはこれです:

  • アクティビティのライフサイクル全体で保持されるデータ モデルとして、フラグメントのシングルトン インスタンスを使用しています。
  • このフラグメントをアクティビティに追加し、このフラグメントに初期化を実行させたい (データベース接続を作成し、データをデータ メンバーにロードする)
  • 最後に、フラグメントからのこのデータは、アクティビティのビューの AdapterViews で使用する必要があります。

つまり、フラグメントをデータで初期化し、フラグメントをアクティビティにアタッチし、フラグメントのデータからアクティビティでアダプターを作成するという 3 つのステップです。私の質問: 適切な実行順序を確保するには、これらのイベントをどのメソッドで発生させる必要がありますか?

どうもありがとう!

4

1 に答える 1