Обработка диалогов при переносе кода с активности на фрагменты - PullRequest
1 голос
/ 25 декабря 2011

Какой лучший способ обработки диалогов при переносе моего кода с активности на фрагменты.

  • Должен ли я использовать обратный вызов для родительского действия и обрабатывать showDialog (int id) в действии, используя интерфейс?;
  • Должен ли я использовать DialogFragment?

1 Ответ

1 голос
/ 26 декабря 2011

Написал ShowDialog (int id) и removeDialog (int id) внутри моего класса фрагмента.

    protected void showDialog(int id) {

        AlertDialog dialog = null;
          switch (id) {
            case SHOWERROR_ID:
                 dialog = new AlertDialog.Builder(mActivity)
                        .setTitle(getString(R.string.alert))
                        .setIcon(R.drawable.error)
                        .setMessage(d_msg)
                        .setPositiveButton(getString(R.string.ok),
                        new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int whichButton) {
                                        removeDialog(SHOWERROR_ID);
                        }
                        })
                        .setNegativeButton(null,
                                new  DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int whichButton) {
                                    }
                        }).create();
                break;
            default:
                break;
            }

            if (dialog != null) {
                FragmentManager fm = getActivity().getSupportFragmentManager();
                FragmentTransaction ftr = fm.beginTransaction();

                CustomDialogFragment newFragment = CustomDialogFragment
                        .newInstance(dialog);

                DialogFragment fragmentDialog = (DialogFragment) fm
                        .findFragmentByTag("" + id);

                if (fragmentDialog != null) {
                    ftr.remove(fragmentDialog);
                    ftr.commit();

                }
                newFragment.show(fm, "" + id);
            }
        }

    protected void removeDialog(int pDialogId) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            FragmentTransaction ftr = fm.beginTransaction();
            DialogFragment fragmentDialog = null;

            fragmentDialog = (DialogFragment) fm.findFragmentByTag("" + pDialogId);

            if (fragmentDialog != null) {
                FragmentTransaction f = ftr.remove(fragmentDialog);
                f.commit();
            }
    }

    protected static class CustomDialogFragment extends DialogFragment {
            private Dialog mDialog;

            public static CustomDialogFragment newInstance(Dialog dialog) {
                CustomDialogFragment frag = new CustomDialogFragment();
                frag.mDialog = dialog;
                return frag;
            }

            public Dialog onCreateDialog(Bundle savedInstanceState) {
                return mDialog;
            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...