Подтвердить что ты не робот

Отклонение DialogFragment программно

Как программно отклонить DialogFragment? В настоящее время я создаю диалоги:

void showDialogWithId(int id){

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    if (id == SEARCHING_DIALOG){

        // Create and show the dialog.
        DialogFragment newFragment = MyDialogFragment.newInstance(SEARCHING_DIALOG,"TEST");
        newFragment.show(ft, "dialog");
    }

    if (id == CONNECTING_DIALOG){

        // Create and show the dialog.
        DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTING_DIALOG,"TEST");
        newFragment.show(ft, "dialog");
    }

    if (id == CONNECTIVITY_DIALOG){


        // Create and show the dialog.
        DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTIVITY_DIALOG);
        newFragment.show(ft, "dialog");
    }

}

И я ожидаю отклонить их:

public void dismissDialog(){

    getFragmentManager().popBackStack();

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);


}

Однако диалоги не увольняются...

4b9b3361

Ответ 1

Попробуйте использовать

getDialog().dismiss();

Внутри диалоговых окон. Например, вы можете найти DialogFragment своим тегом, как вы это делаете, а затем вызвать на нем какой-то метод, который вызывает этот код. Обычно я не инициирую отклонение DialogFragment из Activity, мои диалоговые кнопки делают это для меня. Но я думаю, что это тоже должно работать. Я не уверен, как это повлияет на фрагмент backstack tho.

Ответ 2

Чтобы агрегировать предыдущий ответ и связанные с ним комментарии, удалите диалоговое окно, которое вы должны выполнить:

public void dismissDialog(){
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        DialogFragment df = (DialogFragment) prev;
        df.dismiss();
    }
}

Ответ 3

В моем случае использования я делаю следующее:

В действии (или любом другом месте) от вас отображается диалог, определяющий переменную-член:

private DialogFragment mMyDialog;

Затем назначьте mMyDialog перед его отображением:

mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment
mMyDialog.show();

И, наконец, в том месте, где вам нужно отменить диалог, скажите:

if (mMyDialog != null) {
    mMyDialog.dismiss();
    mMyDialog = null;
}

Ответ 4

MyProgressDialog - это класс, который расширяет DialogFragment

//Как показать

  MyProgressDialog   pd = new MyProgressDialog();
                    Bundle b = new Bundle();
                    b.putString(ProgressDialog.PROGRESS_TITLE, "Loading data");
                    b.putString(ProgressDialog.PROGRESS_MESSAGE, "Getting your data from server");
                    b.putBoolean(ProgressDialog.PROGRESS_IS_CALLBACK_NEEDED, false);
                    pd.setArguments(b);
                    pd.show(getActivity().getSupportFragmentManager(), ProgressDialog.class.getSimpleName());

//Как отклонить

     if (pd != null && pd.isAdded()) {
                        pd.dismiss();
                        pd =  null;
                    }