私はすでにこれを読んでいます:http://developer.android.com/guide/components/fragments.html
一部のアクティビティ コードを新しいフラグメントに移動していますが、以前の onCreate() のコードに問題が見つかりました。
フラグメントを使用する目的: タブ。
各タブ スイッチで呼び出されるコード:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.tabContent, fragment1);
ft.commit();
fragment1、fragment2 などは、アクティビティのインスタンス変数であり、次のようにインスタンス化されonCreate
ます。
fragment1 = new Fragment1();
//etc.
- どのように動作させたいか: アクティビティ (!) と同様に、次のことを意味します: 作成後 - Web サービスを呼び出し、リストが最初に初期化される場所で、初期化がなくなるため、タブを切り替えてもリストはそのまま残ります。私はそれを残しました(スクロールなど)。戻ってくると、ビューの初期化やWebサービスの呼び出しはなく、再び表示されます。アクティビティのように、別のアクティビティを起動して戻ってきた場合、 -
onCreate()
は呼び出されず、onResume()
. でしか初期化していないonCreate()
ので大丈夫です。
リストに入力するデータを取得するために、onCreate() Web サービスを呼び出しています。フラグメントのライフサイクルによると、このコードを配置する候補はいくつかありますが、完全に機能するものはありません。
onCreate(): これは onCreateView() の前に呼び出されます。そのため、ビュー階層はまだ初期化されておらず、Web サービスを呼び出すのは安全ではありません。
onCreateView(): これは、タブを切り替えたり、表示されているコード スニペットを実行したりすると常に呼び出されます。
onActivityCreated(): これはアクティビティが作成された後にのみ呼び出されると思っていましたが、常にFragment.onCreateView() の後に呼び出されます
余談ですが、フラグメントで Web サービスを呼び出すことをお勧めしますか? これについてウェブで何も見つけていませんが、なぜ間違っているのかわかりません。
前もって感謝します!