2011-02-06 6 views
9

मैं एक छोटे से प्रोग्राम पर काम कर रहा हूं, और मुझे एक कस्टम संवाद जोड़ने की ज़रूरत है जो कॉलिंग एसिटीविटी को बंद होने पर कुछ जानकारी पास करे। मैंने संवाद वर्ग बढ़ाया, और जब मैं बंद करता हूं तो कस्टम संवाद को कैप्चर करने का प्रयास करता हूं, ऑनडिस्म श्रोता का उपयोग करके, यह कभी भी पहुंचता नहीं है क्योंकि मैंने कस्टम संवाद का उपयोग किया था।कस्टम संवाद का उपयोग करते समय Dismiss() पर उपयोग नहीं कर सकते - एंड्रॉइड

. 
    . 
    . 
     attributes customizeDialog = new attributes(con,position,pick.getLastVisiblePosition()); 
     customizeDialog.show(); 

(गुण वर्ग कि संवाद वर्ग फैली के नाम किया जा रहा है) -

यह मेरा गतिविधि का हिस्सा है।

यहाँ घटना श्रोता मैं की स्थापना जब संवाद खत्म है -

customizeDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 

     @Override 
     public void onDismiss(DialogInterface dialog) { 
      Log.v("LOG_CAT",attributes.selectedIndexes.get(0) + " " + attributes.selectedIndexes.get(1) + " " + attributes.selectedIndexes.get(2) + " " + attributes.selectedIndexes.get(3) + " " + attributes.selectedIndexes.get(5) + " "); 
    } 

}); 

मैं जानता हूँ कि मैं गलत यह कर रहा हूँ, मैं सिर्फ यह कैसे तय करने के लिए पता नहीं है।

मैं वास्तव में इस समस्या के साथ किसी भी मदद की सराहना करता हूं।

धन्यवाद!

+1

क्या आप अपनी कस्टम डायलॉग क्लास में किसी सुपर विधि के लिए कॉल खो रहे हैं? यह एक सामान्य अपराधी है जब एक कस्टम वर्ग पर आप जिस घटना की उम्मीद कर रहे हैं वह नहीं होता है। –

+0

हे टोफीरा मैंने आपके द्वारा उपयोग किए गए एक ही कोड का उपयोग किया और यह ठीक काम करता है। शायद आप कुछ और याद किया? –

उत्तर

16

मैं अपने गतिविधि इस तरह श्रोताओं को लागू हो जाते हैं ...

public class MyActivity extends Activity 
    implements DialogInterface.OnDismissListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     attributes customizeDialog = new attributes(con,position,pick.getLastVisiblePosition()); 
     customizeDialog.setOnDismissListener(this); 
     customizeDialog.show(); 
    } 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     // Do whatever 
    } 
} 
+2

आपको नहीं लगता कि यह DialogInterface.OnDismissListener – TRonZ

+0

@TRonZ: ओउप्स हां, वह एक टाइपो था। मजेदार है कि किसी को इसके बारे में पता लगाने के लिए लगभग डेढ़ साल लग गए हैं। मैं इसे सही कर दूंगा। – Squonk

+0

असल में मैं अपने ऐप में अपना कोड लागू करने की कोशिश कर रहा था, इसलिए मैंने इसे क्यों समझ लिया। – TRonZ

5

आप अपने बुला गतिविधि एक कस्टम श्रोता इंटरफ़ेस को लागू है कि कहा जाता है जब संवाद बंद हो सकता है:

public interface MyDialogListener { 
    void OnCloseDialog(); 
} 

public class MyActivity implements MyDialogListener { 
    public void SomeMethod() { 
     MyDialog myDialog = new MyDialog(this, this); 
     myDialog.show(); 
    } 

    public void OnCloseDialog() { 
     // Do whatever you want to do on close here 
    } 

} 

public class MyDialog extends Dialog { 
    MyDialogListener mListener; 

    public MyDialog (Context context, MyDialogListener listener) { 
     super(context, R.style.Dialog); 
     mListener = listener; 
    } 

    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.CloseButton: 
       mListener.OnCloseDialog(); 
       dismiss() 
       break; 
      default: 
       //... 
     } 
    } 
} 

यह विशेष रूप से उपयोगी है अगर आप कॉलर को वापस बर्खास्तगी के अलावा सामान भेजना चाहते हैं।

0

याद रखने की एक बात यह है कि OnDismissListener बाल प्रक्रियाओं को खारिज करने के लिए सुन रहा है। आपके ग्राहक संवाद के अभिभावक को onDismissListener की आवश्यकता है, न कि संवाद।

"इंटरफ़ेस संवाद के निर्माता को कुछ कोड चलाने के लिए अनुमति देता है जब संवाद को खारिज कर दिया जाता है।"

1

और अगर आप संवाद अंदर बचत के कुछ प्रकार करना चाहते हैं, फिर से, आप onDicmissListener कस्टम संवाद के लिए के बाद से उपयोग करने के लिए onDismiss डिफ़ॉल्ट रूप से नहीं कहा जाता है:

public class CustomDialog extends Dialog implements DialogInterface.OnDismissListener { 

    public CustomDialog(Context context) { 
     super(context); 
     setupLayout(context); 
    } 

    public CustomDialog(Context context, int theme) { 
     super(context, theme); 
     setupLayout(context); 
    } 

    protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { 
     super(context, cancelable, cancelListener); 
     setupLayout(context); 
    } 

    private void setupLayout(Context context) { 
     this.context = context; 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.custom_dialog); 
     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.width = WindowManager.LayoutParams.FILL_PARENT; 
     getWindow().setAttributes(params); 

     setOnDismissListener(this); 

     loadPreferences(); 
    } 

    private void loadPreferences() { 
     // ... 
    } 

    private void savePreferences() { 
     // ... 
    } 

    @Override 
    public void onDismiss(DialogInterface dialogInterface) { 
     savePreferences(); 
    } 
} 
0

CustomDialog वर्ग के भीतर संवाद जोड़ने के लिए:

public class MessageBoxDialog extends Dialog implements DialogInterface.OnDismissListener 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     setOnDismissListener(this); 
     ... 
    } 

    @Override 
    public void onDismiss(DialogInterface dialogInterface) { 

    } 
} 
संबंधित मुद्दे