複数のフラグメントを持つViewPager
があります。 1つのFragment
でオーディオを再生します。別のフラグメントにスワイプすると、オーディオの再生が停止します。別のフラグメントがViewPager
に表示されていることを検出するにはどうすればよいですか?
onStop
とonHiddenChanged
をオーバーライドしようとしました。失敗。オーバーライドするには、「もうアクティブではありません」メソッドが必要です。いや?
少し掘り下げたところ、ViewPagerはsetUserVisibleHint
とsetMenuVisibility
の両方を呼び出すことがわかりました。 setUserVisibleHintのドキュメント の状態なので、setUserVisibleHint
をオーバーライドします。
このフラグメントのUIが現在ユーザーに表示されているかどうかについてのヒントをシステムに設定します。このヒントはデフォルトでtrueに設定されており、フラグメントインスタンスの状態を保存および復元しても持続します。アプリはこれをfalseに設定して、フラグメントのUIがスクロールして表示されないようにするか、そうでなければユーザーに直接表示されないようにします。これは、フラグメントライフサイクルの更新やローダーの順序付け動作などの操作に優先順位を付けるためにシステムによって使用される場合があります。
このコードをフラグメントに入れてみてください:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// Make sure that we are currently visible
if (this.isVisible()) {
// If we are becoming invisible, then...
if (!isVisibleToUser) {
Log.d("MyFragment", "Not visible anymore. Stopping audio.");
// TODO stop audio playback
}
}
}