親愛なる開発者の皆様へ
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 つのステップです。私の質問: 適切な実行順序を確保するには、これらのイベントをどのメソッドで発生させる必要がありますか?
どうもありがとう!