ライフサイクル対応のフラグメントとLifecycleObserver
クラスがあります
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MyObserver(this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_main, container, false);
}
}
以下は、すべてのフラグメントイベントを適切にログに記録する私のObserverクラスです。
public class MyObserver implements LifecycleObserver {
private static final String TAG = "MyObserver";
public MyObserver(LifecycleOwner lifecycleOwner) {
lifecycleOwner.getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(){
Log.d(TAG, "onCreate: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause(){
Log.d(TAG, "onPause: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(){
Log.d(TAG, "onDestroy: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart(){
Log.d(TAG, "onStart: ");
}
}
onDestroyView
やonActivityCreated
などのフラグメント固有のライフサイクルイベントを聞きたいのですが、これらのイベントはありません
Lifecycle.Event
。アクティビティイベントのみが含まれます。オブザーバーでフラグメントイベントをリッスンするにはどうすればよいですか
フラグメントのviewLifecycleOwner
ライフサイクルを観察できます。
_viewLifecycleOwner.lifecycle.addObserver(yourObserverHere)
_
次に、フラグメントのonDestroyView
lifecyleメソッドが@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
アノテーション付きメソッドに関連付けられます。
フラグメントのviewLifecycleOwner
は、onCreateView
メソッドとonDestroyView
ライフサイクルメソッドの間でのみ使用可能であることに注意してください。
Basim Alamuddinの答えの補足:
リソースコードでわかるように、オブザーバーをviewLifecycleOwner
に追加すると、@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
も呼び出されます。viewLifecycleOwner.lifecycle.addObserver(this)
// androidx.fragment.app.Fragment
void performDestroyView() {
if (mView != null) {
mViewLifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
}
onDestroyView();
void performDestroy() {
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
onDestroy();