Estoy usando un ProgressDialog administrado como un Fragment. Incluso si me puse el ProgressDialog a ser no-cancelable, el botón ATRÁS operará a quitar que Fragment de la pila. Mi clase interna este aspecto:

public static class ProgressDialogFragment extends DialogFragment {

    private DialogStyle dialogStyle;

    public static ProgressDialogFragment newInstance(String title, String message) {
        ProgressDialogFragment fragment = new ProgressDialogFragment();
        Bundle args = new Bundle();
        args.putString("title", title);
        args.putString("message", message);
        fragment.setArguments(args);

        return fragment;
    }

    public void setDialogStyle(DialogStyle dialogStyle) {
        this.dialogStyle = dialogStyle;
    }


    @Override
    public ProgressDialog onCreateDialog(Bundle savedInstanceState) {
        String title = getArguments().getString("title");
        String message = getArguments().getString("message");

        ProgressDialog progressDialog = new ProgressDialog(getActivity());
        progressDialog.setTitle(title);
        progressDialog.setMessage(message);

        if(dialogStyle!=null) {
            switch (dialogStyle) {
                case CANCELABLE:
                    progressDialog.setCancelable(true);
                    break;
                case NON_CANCELABLE:
                    progressDialog.setCancelable(false);
                    break;

            }
        } else {
            progressDialog.setCancelable(false);
        }

        progressDialog.show();

        return progressDialog;
    }
}

Y, a continuación, el método que he de exponer:

public void showProgressDialog(String title, String message, DialogStyle dialogStyle) {
            Fragment prev = fragmentManager.findFragmentByTag("progress dialog");
            if(prev!=null) {
                ft.remove(prev);
            }
            ft.addToBackStack(null);

            DialogFragment newFragment = ProgressDialogFragment.newInstance(title, message);
            ((ProgressDialogFragment)newFragment).setDialogStyle(dialogStyle);
            newFragment.show(fragmentManager, "progress dialog");
        }

Por lo que la evidente confusión aquí es que el botón ATRÁS, se quita la ProgressDialog porque está siendo gestionado como un Fragment. Entonces, ¿cómo puedo hacer que el Dialog no es cancelable?

Parece extraño que intentar algo como:

@Override
    public void onBackPressed() {
        if(fragmentManager.fragmentManager.findFragmentByTag("progress dialog")!=null) {

        }
    }
  • Android parece estar diciendo que ProgressDialog no deben ser utilizados más que por el contrario se debe «utilizar un componente ProgressBar en su diseño.» developer.android.com/guide/topics/ui/dialogs.html. No dicen por qué, pero supongo que podría ser para evitar todo el desorden en tratar de manejar los acontecimientos inusuales después de la espera (error de servidor de llamadas, la aplicación de regresar de tarea en segundo plano, etc.).
InformationsquelleAutor LuxuryMode | 2011-09-07

2 Comentarios

  1. 38

    Lugar de ProgressDialog, ¿por qué no intentar setCancelable(false) en DialogFragment?

    • Buen punto! Tan simple como public void setDialogStyle(DialogStyle dialogStyle) { this.setCancelable(dialogStyle==DialogStyle.CANCELABLE); } (estoy usando enum aquí)
    • Creo que funcionó, gracias!
    • setCancelable también está disponible en ProgressDialog. No entiendo lo que quieres decir por «en Lugar de»

Dejar respuesta

Please enter your comment!
Please enter your name here