2010-06-30 8 views
19

Je gère les boîtes de dialogue par showDialog/dismissDialog/removeDialog.Comment vérifier si la boîte de dialogue est affichée ou afficher plusieurs boîtes de dialogue du même type?

Je veux:

Afficher plusieurs dialogues en nature d'une pile:

a) première fenêtre est affichée à l'aide showDialog(DIALOG_TYPE)

b) les boîtes de dialogue suivantes sont affichés sur le dessus de la boîte de dialogue existante

Maintenant, je suis seulement en mesure d'afficher la première boîte de dialogue en utilisant showDialog, puis les boîtes de dialogue suivantes sont ignorées.

Afficher la dernière boîte de dialogue:

a) Tout d'abord dialogue est affiché en utilisant showDialog(DIALOG_TYPE)

b) application vérifie si dialogue est affichée, ferme de dialogue (si elle est affichée) et ouvre une nouvelle boîte de dialogue.

Y a-t-il une possibilité de réaliser l'une des solutions ci-dessus?

Répondre

54

La boîte de dialogue a une méthode isShowing() qui devrait retourner si la boîte de dialogue est actuellement visible. Vous pouvez donc l'utiliser pour voir si une boîte de dialogue est affichée et la masquer avec dismissDialog(). Vous devez juste garder une référence aux dialogues que vous créez dans onCreateDialog().

+0

Ok, cela satisfait le premier scénario, mais qu'en est-empilement? Peut-être qu'il y a une possibilité d'afficher plusieurs dialogues du même type? – pixel

+4

Ne semble pas fonctionner pour l'empilement. Si j'empile plusieurs boîtes de dialogue les unes sur les autres, les deux ont la valeur true pour la propriété d'affichage. –

3

Vous pouvez utiliser l'indicateur pour vérifier si la boîte de dialogue est ouverte ou non et selon la valeur de l'indicateur, vous pouvez faire ce que vous voulez. Comme j'ai fait. Je n'ai qu'une seule boîte de dialogue mais quand j'en touche une autre EditText et si ma boîte de dialogue est ouverte alors elle devrait se fermer d'abord et ensuite rouvrir avec animation.

extrait de code:

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; 
    } 

Essayez de modifier ce code dans votre chemin. J'espère que cela peut vous aider. Merci.

3

Dialog implémente DialogInterface qui a OnShowListener.

Par conséquent, vous pouvez utiliser le code comme ceci:

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  
    } 
});