2012-02-09 29 views
29

से कॉलिंग गतिविधि विधियों का उपयोग मैं केवल एक विशिष्ट मूल गतिविधि के अंदर एक टुकड़ा का उपयोग करता हूं। अब मुझे आश्चर्य है अगर अगर मैं शामिल इस तरह टुकड़ा से सीधे माता पिता गतिविधि में तरीकों फोन वहाँ किसी भी कमियां हैं:)फ्रैगमेंट

getActivity() someMethodInParentActivitiy (ए और अधिक सामान्य समाधान होगा। पैरेंट गतिविधि पर वापस कॉल करने के लिए खंड में औपचारिक श्रोता इंटरफ़ेस को परिभाषित करें और फिर गतिविधि को उस इंटरफ़ेस को कार्यान्वित करें।

वहाँ कोई कारण (जैसे विश्वसनीयता या गति) कारण है कि मैं दूसरी प्रत्यक्ष विधि के बजाय और अधिक जटिल समाधान गतिविधि के लिए टुकड़ा से कॉल इस्तेमाल करना चाहिए?

उत्तर

21

शुरुआत में प्रदर्शन को न देखें। याद रखें "समयपूर्व अनुकूलन सभी बुराइयों की जड़ है"। दूसरा दृष्टिकोण बेहतर है क्योंकि आपके टुकड़े को विभिन्न गतिविधियों में इस्तेमाल किया जा सकता है। पहला दृष्टिकोण आपके कोड में अधिक निर्भरता प्रस्तुत करता है, टुकड़ा गतिविधि प्रकार पर निर्भर करता है। आप छोटे परिसर का परीक्षण, पुन: उपयोग करने की क्षमता खो रहे हैं। यह अभी सरल लग सकता है, लेकिन भविष्य में आप ;-)

+0

धन्यवाद, मैं यह भी ध्यान देता हूं कि getActivity() के माध्यम से सीधे गतिविधि विधि तक पहुंच इतना आसान नहीं है। शायद मुझे एक अतिरिक्त कलाकार की जरूरत है? – Anguel

+0

हां, कार्यान्वयन के लिए जिसमें 'someMethodInParentActivitiy() 'शामिल है। लेकिन जैसा कि मैंने लिखा है कि इसकी अनुशंसा नहीं की जाती है। – pawelzieba

+0

असल में मुझे थोड़ी उलझन में आया, क्योंकि डियान हैकबर्न ने कहा कि इस तरह की विधि कॉल का उपयोग करना ठीक है: http://markmail.org/thread/sgvnc7bjtjfbh5rx#query:+page:1+mid:6kakhwquxdigf7om+state:results – Anguel

24

अतिरिक्त डाली किया जा करने की आवश्यकता पर देखेंगे:

Activity activity123 = getActivity(); 

if(activity123 instanceof ParentActivity) { 
    ((ParentActivity) activity123).someMethodInParentActivity(); 
} 

तथापि के रूप में @pawelzieba लिखा है, तो यू कि टुकड़ा का उपयोग करना चाहते एक और गतिविधियों में जो शायद यह मामला इस तरह से काम नहीं करेगा .. चीयर्स

+0

अच्छा काम ........ !!! –

9

जब मुझे ऐसा कुछ करने की ज़रूरत है, तो मैं सिर्फ ब्रॉडकास्ट रिसीवर का उपयोग करता हूं ताकि मैं इसे कहीं से भी कॉल कर सकूं।

BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action != null) { 
      if (action.equals("WHATEVER_ACTION")) { 
       // Do stuff 
      } 
     } 
    } 
}; 

तब मेरे टुकड़ा में मैं बस का उपयोग करेगा:

activity.sendBroadcast (नई आशय() setAction ("WHATEVER_ACTION")।);

+1

मुझे सबसे अच्छा अभ्यास की तरह लग रहा है। एक बुनियादी डिजाइन पैटर्न भी। – rwst

+0

क्या हमें गतिविधि और खंड के बीच संचार के लिए इसका उपयोग करने के लिए मेनिफेस्ट में ब्रॉडकास्टर भी पंजीकृत करना है? – Max

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