मुझे पता है कि यह थोड़ी देर पहले पूछा गया था लेकिन यहां मुझे एक सुंदर साफ समाधान मिला है।
मैं इस तरह एक अंतरफलक को परिभाषित:
public interface OpenDialog {
public void showDialog(DialogFragment dialog);
}
कौन सा मेरी गतिविधि तो औजार, संवाद जब इसे खोला है, मेरे InterfaceHolder वर्ग का उपयोग करने के अपने आप के लिए एक संदर्भ गुजर:
public class MyActivity extends FragmentActivity implements OpenDialog {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
InterfaceHolder.set(this);
showDialog(new DialogOne());
}
public void showDialog(DialogFragment dialog) {
dialog.show(getSupportFragmentManager(), "tag");
}
InterfaceHolder है इंटरफ़ेस के स्थिर संदर्भ वाला केवल एक वर्ग जिसका उपयोग मैं इसे पास करने के लिए करता हूं:
public class InterfaceHolder {
private static OpenDialog openDialog;
public void set(OpenDialog openDialog)
this.openDialog = openDialog;
}
public void get()
return openDialog;
}
तो शोडियलॉग विधि उस संवाद को प्रदर्शित करेगी जिसमें मैं इसे पास करता हूं; जैसा कि आप देख सकते हैं, मैं संवाद को प्रदर्शित करने के लिए ऐसा करता हूं। अब, अगर मैं "DialogTwo" अंदर "DialogOne" नामक एक नया संवाद खोलने के लिए चाहते हैं मैं इसे लिखित रूप से कॉल कर सकते हैं:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
और देखा, DialogTwo दिखाया गया है। जाहिर है, आपको यह सुनिश्चित करने के लिए सावधान रहना होगा कि आपकी गतिविधि का संदर्भ इंटरफ़ेसहोल्डर को पास कर दिया गया है (ऐसा करने का एक अच्छा तरीका InterfaceHolder.set (this); showDialog विधि के अंदर रखना है), लेकिन अन्यथा यह काम करने लगता है खूबसूरती से।
स्रोत
2014-04-01 23:04:56
धन्यवाद बिल! यह काम! स्पष्ट रूप से गतिविधि संदर्भ के शो को कॉल करना Dialog() नहीं करता है। – Akshay
मुझे यकीन नहीं है कि मैंने स्वीकार किया है Usage_alertDialog.cancel(); सही जगह पर, लेकिन मैं आपको बता सकता हूं कि जब मैंने इसे क्लिक() पर रद्द कर दिया और फिर बाद के संवाद को बनाने की कोशिश की तो यह एक बल को बंद कर दिया। तो, दूसरे संवाद के रद्द होने के बाद बस इसे (cancel() को स्थानांतरित करने के लिए मेरे लिए प्राकृतिक लग रहा था। –
आप वहां कुछ शानदार Google Analytics युक्तियां भी नोट कर सकते हैं ... मैं रिकॉर्ड कर रहा हूं कि एप्लिकेशन का यह रन एक नई स्थापना या अपग्रेड था। यदि यह एक अपग्रेड है, तो मैं उनके द्वारा आने वाले संस्करण को रिकॉर्ड कर रहा हूं और संस्करण स्थापित किया जा रहा है: 1.5-> 1.8, आदि –