मेरे पास एक Activity
है और इसमें से छह अलग Fragments
संलग्न हैं। प्रत्येक खंड में OnFragmentInteractionListener
इंटरफ़ेस है और कॉलबैक प्राप्त करने के लिए गतिविधि इन सभी श्रोताओं को लागू करती है। यह थोड़ा गन्दा दिखता है, इसलिए मुझे दिलचस्पी है कि इसे सरल बनाने और अधिक सुरुचिपूर्ण बनाने के लिए कुछ पैटर्न/तरीके हैं?एक गतिविधि में कई खंड इंटरैक्शन श्रोताओं को सही ढंग से कैसे संभालें?
उत्तर
एक अच्छा समाधान सभी टुकड़ों के लिए समान ऑनफ्रैगमेंट इंटेक्शन लिस्टर का उपयोग कर सकता है, और प्रत्येक श्रोता विधियों (जैसे एक पैरामीटर की तरह) का एक पैरा का उपयोग करने के लिए यह पता लगाने के लिए कि किस खंड ने कार्रवाई भेजी है।
यहाँ एक उदाहरण:
public void onFragmentMessage(String TAG, Object data){
if (TAG.equals("TAGFragment1")){
//Do something with 'data' that comes from fragment1
}
else if (TAG.equals("TAGFragment2")){
//Do something with 'data' that comes from fragment2
}
...
}
आप उपयोग कर सकते हैं:
एक नया वर्ग और हर टुकड़ा इस वर्ग
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
का उपयोग अपनी गतिविधि में बनाओ ऑब्जेक्ट प्रकार जो आप चाहते हैं हर प्रकार के डेटा को पारित करने के लिए (फिर, हमेशा में वाई अगर, आपको वस्तु को उस प्रकार में परिवर्तित करना होगा जो आवश्यक थे)।
इस तरह से, रखरखाव 6 differents श्रोताओं के मुकाबले आसान है और हर प्रकार के डेटा के लिए एक विधि है जिसे आप पास करना चाहते हैं।
उम्मीद है कि इससे मदद मिलती है।
neonamu's answer में सुधार लाने के मेरे प्रयास:
आप ऊपर निर्दिष्ट की तरह एक अंतरफलक परिभाषित कर सकते हैं, लेकिन सामान्य से एक
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
तब मेजबान गतिविधि में आप यह विशेष प्रकार आप चाहते हैं के लिए लागू कर सकते हैं एक, या की तरह वस्तु के लिए ऊपर का सुझाव दिया:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
इस तरह से जब आप अपने आवेदन की जरूरतों पर निर्भर करता है इंटरफ़ेस को लागू है, शायद आप इस इंटरफ़ेस को किसी अन्य स्थिति में पुन: उपयोग कर सकते हैं।
- 1. सी # - सी ++ परियोजना इंटरैक्शन को सही तरीके से कैसे संभालें?
- 2. कैसे सही ढंग से
- 3. गतिविधि में बैक बटन को कैसे संभालें
- 4. मुख्य गतिविधि से खंड खंड को कैसे कॉल करें
- 5. कैसे सही ढंग से एक ईवेंट हैंडलर
- 6. प्रभावी ढंग से lwp टाइमआउट को संभालें
- 7. UnsafeMutablePointer को सही तरीके से कैसे संभालें
- 8. गतिविधि और टुकड़ा इंटरैक्शन
- 9. ThreadInterruptedException को सही तरीके से कैसे संभालें?
- 10. कैसे सही ढंग से एक सीवी :: शून्य()
- 11. इवेंट श्रोताओं को कई तत्वों में जोड़ना
- 12. एन-स्तरीय एप्लिकेशन में त्रुटियों को सही ढंग से कैसे संभालें?
- 13. कोर डेटा को सही ढंग से कैसे संभालें Iphone पर त्रुटियों को उपयोगकर्ता अनुभव त्रुटि?
- 14. गेटर कार्यों को सही ढंग से "सही आगे" कैसे करें?
- 15. कैसे सही ढंग से `defmacro`
- 16. एक बड़ी स्ट्रिंग को सही तरीके से कैसे संभालें?
- 17. जावा में कई भाषाओं को कैसे संभालें?
- 18. सही ढंग से छोरों
- 19. एंड्रॉइड - सेवा और गतिविधि इंटरैक्शन
- 20. सही ढंग से
- 21. NSManagedObjectContext सही ढंग से
- 22. अंतिम खंड को
- 23. रूबी सही ढंग से
- 24. एक छोटी टीम में कई परियोजनाओं को कैसे संभालें
- 25. एक रेल के रूप में कई मॉडलों को कैसे संभालें?
- 26. RxJava (एंड्रॉइड) के अंदर त्रुटि को सही ढंग से कैसे संभालें?
- 27. सही ढंग से कोष्ठक
- 28. कैसे सही ढंग से तेजी से
- 29. सही ढंग से एक datatable (datatable.select)
- 30. जीयूआई लाइब्रेरी: फोकस को सही तरीके से कैसे संभालें?
एक आकर्षण की तरह काम करता है। आपका बहुत बहुत धन्यवाद! –
मैं सोच रहा था कि आप @ ओवरराइड का उपयोग क्यों करते हैं और उपयोगकर्ता नियोनामु नहीं करता है। क्या दोनों काम करते हैं? – Burkely91
@ बुर्कली 9 1 हां यह इसके बिना काम करेगा। लेकिन आपको इसका इस्तेमाल करना चाहिए। जावा में ओवरराइड एनोटेशन एक चेक/सत्यापन होना है जो आप वास्तव में ओवरराइड कर रहे हैं जो आपको लगता है कि आप हैं (यदि आप उदाहरण के लिए पैरामीटर भूल जाते हैं तो यह एक त्रुटि की रिपोर्ट करेगा) ओवरराइड के बिना आप बस एक नई विधि को परिभाषित करेंगे एक ही नाम के साथ अलग-अलग पैरामीटर (ओवरलोड लोड करना) और इंटरफ़ेस को कार्यान्वित नहीं करना – HenriqueMS