DialogFragmentライフサイクルの概要

3232 ワード

前の記事ではDialogの使用についてDialogFragmntのいくつかの使用常識について説明しました.ここではDialogFragmentでよく使われるライフサイクル関数について簡単に説明します.呼び出し順序は、onAttach-->onCreate->onCreateDialog--> onCreateView-->onView Created-->onSaveInstancesStateです.
DialogFragmentでActivityの関数を呼び出すことができるように、onAttachにattachのActivityインスタンスが入力されます.
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        historyViewClickListener = (OnHistoryViewClickListener) activity;
        context = activity;
    }

DialogFragmentのスタイルをonCreateで設定します.フルスクリーン表示か、Titlebarを表示するかなどです.
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light); //   titlebar,    
    }

onCreateDialogでdialogリスニング関数を設定します.たとえば、戻りキーのリスニングなどです.
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    doHide();
                    return true;
                }
                return false;
            }
        });
        return dialog;
    }

onCreateViewでviewの初期化を行い、savedIsintanceState Bundleデータを解析し、DialogFragmentが回収されて再構築されるデータ処理ロジックを処理する.
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.atom_flight_history_record_view, container, false);
        Injector.inject(this, view);

        if (null != savedInstanceState) {
            records = (List) savedInstanceState.getSerializable("records");
            isShowDays = savedInstanceState.getBoolean("isShowDays", false);
            spaceHeight = savedInstanceState.getInt("spaceHeight");
            listAdapter = new FlightHistoryListAdapter(context, records, isShowDays);
        } else {
            listAdapter = new FlightHistoryListAdapter(context, records, isShowDays);
        }
         return view;
}

onView CreatedはonCreateViewの直後に実行され、アニメーション効果などのインタフェースの初期化が完了した後の操作を実行します.
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        showHistoryAnimation();
    }

onSaveInstanceStateにページの再構築に必要なデータを保存します.
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putSerializable("records", (Serializable) records);
        outState.putBoolean("isShowDays", isShowDays);
        outState.putInt("spaceHeight", spaceHeight);
    }