एंड्रॉइड प्रलेखन से पता चलता है कि किसी गतिविधि से होस्ट किए गए टुकड़े में संवाद करने के लिए, खंड एक कॉलबैक इंटरफेस को परिभाषित कर सकता है और यह आवश्यक है कि मेजबान गतिविधि इसे कार्यान्वित करे। मूल पैटर्न में आपके टुकड़े में onAttach
लागू करने और कॉलबैक इंटीफेस में गतिविधि कास्टिंग शामिल है। http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity देखें।क्या गतिविधि और एक नेस्टेड टुकड़े के बीच संवाद करने के लिए Activity.onAttachFragment या Fragment.onAttach का उपयोग करना बेहतर है?
यहां कुछ प्रारंभिक डेटा के साथ-साथ नेविगेशन कॉलबैक सुनने के लिए एक उदाहरण प्रदान करने का एक उदाहरण दिया गया है।
public class HostActivity extends Activity implements FragmentHost {
@Override
UiModel getUiModel() {
return mUiModel;
}
@Override
FragmentNavListener getNavListener() {
return mNavListener;
}
...
}
public class HostedFragment extends Fragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof FragmentHost) {
FragmentHost host = (FragmentHost) activity;
setUiModel(host.getUiModel());
setNavListener(host.getFragmentNavListener());
}
}
...
}
मेजबान गतिविधि में onAttachFragment
का उपयोग कर स्पष्ट रूप से टुकड़ा प्रारंभ करने के लिए इस की तुलना करें:
- यह बनाता है:
मेरे लिएpublic class HostActivity extends Activity { @Override public void onAttachFragment(Fragment fragment) { super.onAttachFragment(fragment); if (fragment instanceof HostedFragment) { HostedFragment hostedFragment = ((HostFragment) fragment); hostedFragment.setUiModel(mUiModel); hostedFragment.setNavListener(mNavListener); } } ... }
, यह पहली पैटर्न की तरह लगता है कुछ कमियां विभिन्न गतिविधियों से उपयोग करने के लिए टुकड़ा कठिन है, के बाद से उन सभी गतिविधियों को आवश्यक इंटरफ़ेस को लागू करना होगा। मैं ऐसे मामलों की कल्पना कर सकता हूं जहां एक दिए गए खंड उदाहरण को होस्ट गतिविधि द्वारा पूरी तरह से कॉन्फ़िगर करने की आवश्यकता नहीं है, फिर भी सभी संभावित मेजबान गतिविधियों को मेजबान इंटरफ़ेस को लागू करने की आवश्यकता होगी।
- यह कोड को इस्तेमाल किए जा रहे पैटर्न से अपरिचित किसी के लिए अनुसरण करना थोड़ा कठिन बनाता है। ऑनफ्रैगमेंट में खंड को शुरू करना एक्टेड का पालन करना आसान लगता है, क्योंकि प्रारंभिक कोड उसी वर्ग में रहता है जो टुकड़ा बनाता है।
- यूनिट एक पुस्तकालय का उपयोग करते समय onAttach बुला के बाद से Robolectric की तरह कठिन हो जाता है, परीक्षण, आप अब FragmentHost बल्कि सिर्फ बुला से आप में से जो लोग करने के लिए गतिविधि किया है के लिए लागू करना चाहिए onAttach (नई गतिविधि()।
टुकड़ा संचार, क्या पैटर्न आप बेहतर मिल रहा है, और क्यों? वहाँ मेजबान गतिविधि से onAttachFragment
उपयोग करने के लिए कमियां हैं?
ओटो अब बहिष्कृत है – Louis