6

フラグメントがユーザーに表示されるたびに、いくつかのコードを実行する必要があります。

API を調べると、これに最も近いフック メソッドは onResume です。ただし、コードを使用してデバッグすると、ユーザーが戻るボタンを選択して以前に表示されたフラグメントに戻るときに onResume が呼び出されないようです。

私が見ている動作を明確にするために:

ActionBar のタブを構成する「親」アクティビティと、F1 と F2 の 2 つのフラグメントがあります。

ユーザーがタブを選択すると、F1 キーがアクティビティに読み込まれます。ボタンを押すと、ユーザーは F2 に移動できます。これは別のタブではありません... F2 はレイアウトに入れ替わっています。

ログ ステートメントを追加すると、ユーザーが F2 の [戻る] ボタンを選択すると、次のことが起こることがわかります....

1) F2 で onPause() が呼び出されます。2) F1 はアクティビティにロードされます... しかし、F1 の onResume() は呼び出されません

現時点では、ログにエラーはありません。

ここで私が間違っていることはありますか?

前もって感謝します、

ニール。

4

2 に答える 2

10

わかりました、これはパイロット エラーだったようです。アクティビティ内のフラグメントを切り替える元のコードは....

public void switchFragment(Fragment newFragment, String tag) {
    getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, newFragment)
            .addToBackStack(tag)
            .commit();
}

上記のコードでの add() の呼び出しは、実際には replace() である必要があります。アクティビティ内のフラグメントを置き換えないと、戻るボタンの動作が混乱するようです。

正直に言うと、なぜこのようなことが起こるのか正確には 100% 確信が持てないことを認めなければなりません。ただし、変更を行った後、戻るボタンが呼び出されると、宛先フラグメントで onResume() メソッドが呼び出されます。

于 2012-11-24T21:00:01.183 に答える
0

この少し奇妙な質問は、この特定のメソッドが呼び出されるように設計されたイベントが発生し、すべての条件が満たされたときに、既存のクラスメソッドが呼び出されることが保証されているためです。最も達成したいタスクに当てはまるものを選択してください。こちらのドキュメントをご覧ください

ここに画像の説明を入力

于 2012-11-24T17:55:38.277 に答える