2010-06-30 10 views
19

मैं showDialog/dismissDialog/removeDialog द्वारा संवाद प्रबंधित कर रहा हूं।यह जांचने के लिए कि क्या संवाद प्रदर्शित होता है या उसी प्रकार के कई संवाद प्रदर्शित करता है?

मैं चाहता हूँ करने के लिए: एक ढेर की वस्तु के रूप में कई संवादों

प्रदर्शन:

क) प्रथम संवाद का उपयोग showDialog(DIALOG_TYPE)

ख दिखाया गया है) अगला संवाद मौजूदा संवाद

के शीर्ष पर दिखाए जाते हैं

अब मैं केवल showDialog का उपयोग करके पहला संवाद प्रदर्शित करने में सक्षम हूं और फिर अगले संवादों को अनदेखा कर दिया जाता है।

प्रदर्शन पिछले संवाद:

क) प्रथम संवाद का उपयोग showDialog(DIALOG_TYPE)

ख दिखाया गया है) आवेदन जांच करता है कि संवाद प्रदर्शित किया जाता है, संवाद बंद (यदि यह प्रदर्शित किया जाता है) और एक नया संवाद खुलता है।

क्या उपर्युक्त समाधानों में से कोई एक प्राप्त करने की कोई संभावना है?

उत्तर

54

डायलॉग में isShowing() विधि है जो डायलॉग वर्तमान में दिखाई देने पर वापस आना चाहिए। तो आप इसका उपयोग यह देखने के लिए कर सकते हैं कि कोई संवाद दिखा रहा है या इसे अस्वीकार करने के साथ छुपाएं Dialog()। आपको केवल अपने द्वारा बनाए गए संवादों का संदर्भ रखना होगा, CreativeCialog()।

+0

ठीक है, यह पहले परिदृश्य को संतुष्ट करता है, लेकिन क्या stacking के बारे में? शायद एक ही प्रकार के कई संवाद दिखाने की संभावना है? – pixel

+4

स्टैकिंग के लिए काम नहीं लग रहा है। यदि मैं एक दूसरे के शीर्ष पर कई संवाद ढेर करता हूं, तो दोनों संपत्ति दिखाने के लिए सच हैं। –

3

आप फ्लैग का उपयोग यह जांचने के लिए कर सकते हैं कि संवाद खोला गया है या नहीं और ध्वज मूल्य के अनुसार आप जो चाहें कर सकते हैं। जैसे मैंने किया। मेरे पास केवल एक ही संवाद है लेकिन जब मैं EditText को स्पर्श करता हूं और यदि मेरा संवाद खोला जाता है तो इसे पहले बंद करना चाहिए और फिर एनीमेशन के साथ फिर से खोलना चाहिए।

कोड स्निपेट: अपने रास्ते में इस कोड को बदलने के लिए

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

प्रयास करें। आशा है इससे आपको सहायता मिलेगी। धन्यवाद।

3

DialogDialogInterface लागू करता है जिसमें OnShowListener है।

इसलिए आप इस तरह कोड का उपयोग कर सकते हैं:

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  
    } 
}); 
संबंधित मुद्दे