DialogFragment से परिणाम प्राप्त करने का एक बहुत सरल तरीका है।
सबसे पहले, अपनी गतिविधि, टुकड़ा, या FragmentActivity में आपको निम्न जानकारी जोड़ने की आवश्यकता है:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
requestCode
मूल रूप से DialogFragment आप बुलाया के लिए अपने पूर्णांक लेबल है, मैं दिखाता हूँ कैसे एक सेकंड में यह काम करता है। परिणाम कोड वह कोड होता है जिसे आप अपने वर्तमान प्रतीक्षा गतिविधि, फ़्रैगमेंट या फ़्रैगमेंटएक्टिविटी बताकर डायलॉग फ़्रेग्मेंट से वापस भेजते हैं।
में जाने के लिए कोड का अगला टुकड़ा डायलॉगफ्रैगमेंट के लिए कॉल है। एक उदाहरण यहाँ है:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
इन तीन पंक्तियों के साथ आप अपने DialogFragment की घोषणा कर रहे हैं, एक RequestCode (जिसे onActivityResult (...) कहेंगे, एक बार डायलॉग खारिज होने के बाद, और आप डायलॉग दिखा रहे हैं, सेट करते हुए। यह सरल है।
अब, अपने DialogFragment में आपको सिर्फ एक लाइन को सीधे जोड़ने की जरूरत है dismiss()
ताकि आप onActivityResult () पर एक परिणाम भेज सकें।
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
बस। ध्यान दें, resultCode परिभाषित किया गया है int resultCode
जो मैंने resultCode = 1;
इस मामले में निर्धारित किया है।
बस, अब आप अपने DialogFragment के परिणाम को अपनी कॉलिंग गतिविधि, फ़्रैगमेंट या Fragment.ctivity पर वापस भेज सकते हैं।
इसके अलावा, ऐसा लगता है कि यह जानकारी पहले पोस्ट की गई थी, लेकिन एक पर्याप्त उदाहरण नहीं दिया गया था, इसलिए मुझे लगा कि मैं अधिक विस्तार प्रदान करूंगा।
EDIT 06.24.2016
ऊपर दिए गए भ्रामक कोड के लिए मैं क्षमा चाहता हूँ। लेकिन आप निश्चित रूप से लाइन के रूप में देखकर गतिविधि को परिणाम वापस नहीं पा सकते हैं:
dialogFrag.setTargetFragment(this, 1);
एक लक्ष्य निर्धारित करता है Fragment
और नहीं Activity
। तो ऐसा करने के लिए आपको कार्यान्वयन a का उपयोग करने की आवश्यकता है InterfaceCommunicator
।
अपने DialogFragment
सेट में एक वैश्विक चर
public InterfaceCommunicator interfaceCommunicator;
इसे संभालने के लिए एक सार्वजनिक समारोह बनाएँ
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
फिर जब आप कोड को वापस भेजने के लिए तैयार हो जाते हैं Activity
जब DialogFragment
चल रहा होता है, तो आप बस dismiss();
अपने से पहले लाइन जोड़ते हैं DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
आपकी गतिविधि में अब आपको दो काम करने होंगे, पहला यह है कि कोड की एक पंक्ति को हटा दें जो अब लागू नहीं है:
dialogFrag.setTargetFragment(this, 1);
फिर इंटरफ़ेस लागू करें और आप सभी काम कर रहे हैं। आप निम्न implements
वर्ग को अपनी कक्षा के सबसे ऊपर स्थित खंड में जोड़कर ऐसा कर सकते हैं :
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
और फिर @Override
गतिविधि में कार्य करता है,
@Override
public void sendRequestCode(int code) {
// your code here
}
आप इस इंटरफ़ेस विधि का उपयोग उसी तरह करेंगे जैसे आप onActivityResult()
विधि करेंगे । सिवाय इंटरफ़ेस विधि के लिए है DialogFragments
और अन्य के लिए है Fragments
।