DialogFragment的回调监听

前言

最近在项目中遇到的问题:如何从DialogFragment创建一个回调到另一个Fragment
在Fragment中点击了一个DialogFragment 在DialogFragment 消失的时候 通知当前的Fragment 需要做的事情

Fragment类

public class MyFragment extends Fragment {
        int mStackLevel = 0;
        public static final int DIALOG_FRAGMENT = 1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (savedInstanceState != null) {
                mStackLevel = savedInstanceState.getInt("level");
            }
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt("level", mStackLevel);
        }

        void showDialog(int type) {
            mStackLevel++;
            FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
            Fragment prev = getActivity().getFragmentManager().findFragmentByTag("dialog");
            if (prev != null) {
                ft.remove(prev);
            }
            ft.addToBackStack(null);
            switch (type) {
                case DIALOG_FRAGMENT:
                    DialogFragment dialogFrag = MyDialogFragment.newInstance(123);
                    dialogFrag.setTargetFragment(this, DIALOG_FRAGMENT);
                    dialogFrag.show(getFragmentManager().beginTransaction(), "dialog");
                    break;
            }
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch(requestCode) {
                case DIALOG_FRAGMENT:
                    if (resultCode == Activity.RESULT_OK) {
                        // 完成后的代码逻辑
                    } else if (resultCode == Activity.RESULT_CANCELED){
                        // 取消后的代码逻辑
                    }
                    break;
            }
        }
    }

DialogFragment类:

 public class MyDialogFragment extends DialogFragment {
        public static MyDialogFragment newInstance(int num) {
            MyDialogFragment dialogFragment = new MyDialogFragment();
            Bundle bundle = new Bundle();
            bundle.putInt("num", num);
            dialogFragment.setArguments(bundle);
            return dialogFragment;
        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return new AlertDialog.Builder(getActivity())
                    .setTitle(R.string.ERROR)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setPositiveButton(R.string.ok_button,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    Activity.RESULT_OK, getActivity().getIntent());
                                }
                            }
                    )
                .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            getTargetFragment().onActivityResult(getTargetRequestCode(),
                                    Activity.RESULT_CANCELED, getActivity().getIntent());
                        }
                    })
                    .create();
        }
    }

猜你喜欢

转载自blog.csdn.net/life_s/article/details/80876187