2010-06-30 17 views
19

Estoy administrando cuadros de diálogo por showDialog/dismissDialog/removeDialog.¿Cómo comprobar si se muestra el cuadro de diálogo o mostrar varios cuadros de diálogo del mismo tipo?

Quiero:

mostrar varios cuadros de diálogo en una especie de pila:

a) En primer diálogo se muestra usando showDialog(DIALOG_TYPE)

b) los cuadros de diálogo siguientes se muestran en la parte superior del cuadro de diálogo existente

Ahora solo puedo mostrar el primer cuadro de diálogo usando showDialog y luego se ignoran los siguientes cuadros de diálogo.

Display último diálogo:

a) En primer diálogo se muestra usando showDialog(DIALOG_TYPE)

b) aplicación comprueba si se muestra de diálogo, se cierra de diálogo (si se muestra) y se abre un nuevo diálogo.

¿Hay alguna posibilidad de alcanzar una de las soluciones anteriores?

Respuesta

54

El cuadro de diálogo tiene un isShowing() método que debería devolver si el cuadro de diálogo está actualmente visible. Entonces puede usar eso para ver si se muestra un diálogo y ocultarlo con dismissDialog(). Solo tiene que mantener una referencia a los cuadros de diálogo que crea en onCreateDialog().

+0

Ok, esto satisface el primer escenario, pero ¿qué pasa con el apilamiento? ¿Tal vez hay alguna posibilidad de mostrar varios diálogos del mismo tipo? – pixel

+4

Parece que no funciona para apilar. Si apilo varios cuadros de diálogo uno sobre el otro, ambos son verdaderos para la propiedad que se muestra. –

3

Puede usar la bandera para verificar si el diálogo está abierto o no y, de acuerdo con el valor del indicador, puede hacer lo que desee. Como yo lo hice. Solo tengo un cuadro de diálogo, pero cuando toco otro EditText y mi cuadro de diálogo se abre, debe cerrarse primero y luego volver a abrir con animación.

Fragmento de código:

private EditText mEditText, mEditCode; 
    private Dialog mDialog; 
    private int mClicked = 0; 
    private boolean isShown = false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mEditText = (EditText)findViewById(R.id.EnterValue); 
     mEditText.setClickable(true); 
     mEditText.setOnClickListener(this); 

     mEditCode = (EditText)findViewById(R.id.EnterCode); 
     mEditCode.setClickable(true); 
     mEditCode.setOnClickListener(this); 
    } 

    public void onClick(View nView) 
    { 
     switch (nView.getId()) 
     { 
     case R.id.EnterValue: 
      mClicked = R.id.EnterValue; 
      mEditText.requestFocus(); 
      mEditText.setFocusableInTouchMode(false); 
      mEditText.setEnabled(true); 
      mEditText.setSelection(mEditText.getText().toString().trim().length()); 
      if(isShown) 
      { 
       mDialog.dismiss(); 
       showInfoDialog(); 
      } 
      else 
      { 
       showInfoDialog(); 
      } 
      break; 
     case R.id.EnterCode: 
      mClicked = R.id.EnterCode; 
      mEditCode.requestFocus(); 
      mEditCode.setFocusableInTouchMode(false); 
      mEditCode.setEnabled(true); 
      mEditCode.setSelection(mEditCode.getText().toString().trim().length()); 
      if(isShown) 
      { 
       mDialog.dismiss(); 
       showInfoDialog(); 
      } 
      else 
      { 
       showInfoDialog(); 
      } 
      break; 
     } 
    } 

    private boolean showInfoDialog() 
    { 
     mDialog = new Dialog(CustomKeyboardNotLikeAndroidActivity.this, R.style.PauseDialog); 
     mDialog.setContentView(R.layout.keyboard); 
     mDialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
     mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
     mDialog.setCancelable(true); 
     isShown = true; 
     mDialog.show(); 
     return false; 
    } 

intentar alterar este código en su camino. Espero que esto le pueda ayudar. Gracias.

3

Dialog implementa DialogInterface que tiene OnShowListener.

Por lo tanto se puede utilizar un código como éste:

Dialog dialog = new Dialog(context); 
// ... set all things considering your dialog 
dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override 
    public void onShow(DialogInterface dialog) { 
     // do something when your dialog is shown  
    } 
}); 
Cuestiones relacionadas