18

ライフサイクル対応のフラグメントと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: ");
            }

        }

onDestroyViewand のようなフラグメント固有のライフサイクルイベントをリッスンしたいのですonActivityCreatedが、これらのイベントはありません

Lifecycle.Event. アクティビティ イベントのみが含まれます。オブザーバーでフラグメント イベントをリッスンするにはどうすればよいですか

4

4 に答える 4

0

Basim Alamuddin の回答の補足:</p>

リソース コードでわかるよう@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)に、オブザーバーを に追加するときにも呼び出されますviewLifecycleOwner: 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();
于 2019-10-12T11:57:27.587 に答える