2011-12-06 31 views
57

estoy usando un DialogFragment, y mientras yo he puesto con éxito una imagen para cerrar (es decir descarto) del cuadro de diálogo cuando se pulsa, estoy teniendo dificultades para encontrar el camino para cerrar el diálogo cuando el usuario hace clic en cualquier lugar fuera de ella, al igual que funciona con diálogos normales. Yo pensé que habría algún tipo deCómo descartar un DialogFragment al presionar fuera del cuadro de diálogo?

dialogFragment.setCanceledOnTouchOutside(true); 

llamada, pero no veo que en la documentación.

¿Esto es posible con DialogFragment en absoluto? ¿O estoy buscando en los lugares equivocados? Intenté interceptar eventos táctiles en la actividad "principal" pero, aparte de no obtener ningún evento táctil, no me pareció correcto.

Respuesta

136
DialogFragment.getDialog().setCanceledOnTouchOutside(true); 

debe ser llamado en onCreateView (como Apurv Gupta señaló).

+26

Debe llamarse en 'onCreateView' –

+0

¿Qué sucede si no quiero que se cancele pero en su lugar solo se cierra? – jjxtra

50
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 
     getDialog().setCanceledOnTouchOutside(true); 
     ... 
     } 
1
DialogFragment.getDialog().setCanceledOnTouchOutside(false); 

Fue errores de escritura. Yo tuve el mismo problema. Esto funciona bien para Java y Mono Mono para Android será:

this.getDialog().SetCanceledOnTouchOutside(false); 
18
/** The system calls this only when creating the layout in a dialog. */ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // The only reason you might override this method when using onCreateView() is 
     // to modify any dialog characteristics. For example, the dialog includes a 
     // title by default, but your custom layout might not need it. So here you can 
     // remove the dialog title, but you must call the superclass to get the Dialog. 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setCanceledOnTouchOutside(true); 

     return dialog; 
    } 
+0

esto no funcionó para mí. Tuve que llamar a 'setCanceledOnTouchOutside' en' onCreateView' según @Apurv. Debo mencionar que llamé a 'setCanceledOnTouchOutside (false)' – kimbaudi

0

recomendaría utilizar mi solución sólo después de probar las soluciones anteriores. He descrito mi solución here. Solo para resumir, estoy comprobando los límites táctiles de DialogFragment.getView(). Cuando los puntos de contacto están fuera de DialogFragment, estoy descartando el Diálogo.

0
  Dialog.SetCanceledOnTouchOutside(true); 

trabajado para mí
Mi Código

class dlgRegister : DialogFragment 
     { 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
      { 
    .... 
    .... 
    } 
    public override void OnActivityCreated(Bundle savedInstanceState) 
      { 
       Dialog.Window.RequestFeature(WindowFeatures.NoTitle); 
       Dialog.SetCanceledOnTouchOutside(true); 
       base.OnActivityCreated(savedInstanceState); 
       Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation; 
      } 
    } 
+0

¡Estás cerca, pero no está bien! – sud007

2

muchas respuestas, pero aquí, el accidente de aplicación cuando se abre el diálogo. Escribir getDialog().setCanceledOnTouchOutside(true); dentro onCreateView no funcionó y se estrelló mi aplicación.

(Estoy usando AppCompatActivity como mi BaseActivity y android.app.DialogFragment como mi Fragmento).

lo que funciona es una de las dos siguientes líneas:

getDialog() setCanceledOnTouchOutside (true);.

O

this.getDialog() setCanceledOnTouchOutside (verdadero).;

dentro onActivityCreated como

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom; 
     //getDialog().getWindow().setDimAmount(0.85f); 
     getDialog().setCanceledOnTouchOutside(true);//See here is the code 
    } 

Lo que no debe utilizar:

DialogFragment.getDialog().setCanceledOnTouchOutside (falso);

tiros siguiente error

enter image description here

y escribir el código en onCreateView se bloquea la aplicación! Por favor, actualice la respuesta si encuentra algo mal.

Cuestiones relacionadas