13

मैं एक टुकड़ा स्क्रीन से एक सक्रियता में एक विधि कॉल करने की कोशिश कर रहा हूँ।एक टुकड़े के अंदर से कॉलिंग गतिविधि विधि

मेरे पास myMethod() नामक एक विधि है जो MyActivity नामक गतिविधि में है; मेरे पास स्क्रीन 1 फ्रैगमेंट नामक एक टुकड़ा है।

मैं Screen1Fragment के अंदर से MyActivity.myMethod() को कॉल करना चाहता हूं लेकिन मुझे यकीन नहीं है कि यह कैसे करें।

पहले स्क्रीन 1 फ्रैगमेंट एक गतिविधि थी और इसलिए मैं माईएक्टिविटी का विस्तार कर रहा था ताकि मैं सीधे myMethod() को कॉल कर सकूं। लेकिन मुझे टैब उपयोग को स्लाइड करने के लिए गतिविधि को एक टुकड़े में बदलना पड़ा है।

अग्रिम धन्यवाद।

+5

'((YourActivityClass) getActivity) .myMethod();' –

+0

http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – jpm

+0

हाय, जब मैं इस कोशिश मैं कह डाली नहीं कर सकता कोई त्रुटि मिलती है FragmentActivity से MyActivity तक। क्या इस कोड का उपयोग करने में सक्षम होने के लिए माईएक्टिविटी को मेरे लिए फ्रैगमेंट एक्टिविटी का विस्तार करना है। –

उत्तर

30

अपने टुकड़े में getActivity() का उपयोग करें।

MyActivity activity = (MyActivity) getActivity(); 
activity.myMethod(); 

यदि आप यकीन है कि अगर आपके टुकड़ा MyActivity तो

Activity activity = getActivity(); 
if(activity instanceof MyActivity){ 
     MyActivity myactivity = (MyActivity) activity; 
     myactivity.myMethod(); 
} 
+0

हाय, पहला तरीका मुझे एक त्रुटि है कि FragmentActivity से MyActivity पर कास्ट नहीं कर सकते हैं देता है। दूसरा तरीका मुझे कोई त्रुटि नहीं देता है लेकिन यह बटन क्लिक पर विधि लोड नहीं कर रहा है। क्या मैं क्लिक पर बटन के अंदर कोड डालता हूं। –

+1

फिर आपको गतिविधि की बजाय FragmentActivity से अपनी गतिविधि का विस्तार करना चाहिए। (सार्वजनिक वर्ग MyActivity फैली FragmentActivity {...) – Sipka

+0

हाय, पहला तरीका महान काम कर रहा था, लेकिन किसी कारण से अपने आवेदन अब जब मैं इसे इस्तेमाल करने की कोशिश दुर्घटनाग्रस्त है। –

0

से जुड़ा हुआ है विधि MainActivity के स्थिर विधि, की तरह कुछ है, तो नहीं कर रहे हैं:

public static void someMethod(){} 

फिर, यह बहुत सरल है। बस

MainActivity.someMethod() 

फोन हालांकि, मुझे लगता है कि क्या आप वास्तव में चाहते हैं गतिविधि वर्ग से कुछ समारोह का उपयोग करने की है। तो फिर तुम

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState){ 

     container.getContext().someMethod(); 

    } 
+2

आईएमओ यह बुरा अभ्यास है। 1. कंटेनर शून्य हो सकता है, और getContext() Context देता है, जिसे आपको अभी भी जांचना है कि MyActivity उदाहरण है या नहीं। 2।आप स्थिर तरीकों के माध्यम से गतिविधि के साथ संवाद नहीं करना चाहते हैं, तब से उस गतिविधि के 2 उदाहरण होने के लिए संभव नहीं है। – Sipka

+1

अच्छा बिंदु। लेकिन मुझे लगता है कि यह इस मामले में ठीक है। ऐसा लगता है कि सवाल मालिक गतिविधि में कुछ स्लाइडिंग टैब चाहता है। हमें पूरा यकीन है कि गतिविधि वहां है। मैं वैसे भी एक स्थिर विधि का उपयोग करने का सुझाव नहीं दे रहा हूं। मैं अनुमान लगा रहा हूं कि असली सवाल क्या है। –

18

टुकड़ा दृश्य creater में निम्न कोड का उपयोग आप अपने टुकड़ा पूरी तरह से गतिविधि आप के साथ जोड़ते रहे हैं की स्वतंत्र करना चाहिए कर सकते हैं। टुकड़ों का मुद्दा यह है कि आप विभिन्न गतिविधियों के साथ विभिन्न संदर्भों में उनका पुन: उपयोग कर सकते हैं। इसे प्राप्त करने के लिए और अभी भी official documentation में अनुशंसित निम्नलिखित पैटर्न को अपनी गतिविधि से विधियों को कॉल करने में सक्षम होना।

अपने टुकड़ा में:

  • विधि

    public interface MyFragmentCallback{ 
        public void theMethod(); 
    } 
    
  • के साथ एक सार्वजनिक इंटरफेस को परिभाषित एक क्षेत्र को परिभाषित करने और एक डाली संदर्भ मिलता है:

    private MyFragmentCallback callback; 
    public void onAttach(Activity activity){ 
        callback = (MyFragmentCallback) activity 
        super.onAttach(activity); 
    } 
    

अपनी गतिविधि में

  • वर्ग परिभाषा MyFragmentCallback लागू।
  • लागू theMethod() अपनी गतिविधि में (ग्रहण ऐसा करने के लिए कहेगा)

फिर, अपने टुकड़ा से, आप कॉल कर सकते हैं callBack.theMethod()

इस और के बीच अंतर बस getActivity पर अपने विधि बुला() यह है कि आपका टुकड़ा अब इस विशिष्ट गतिविधि के साथ जोड़ा नहीं गया है। तो आप इसे अन्य गतिविधियों के साथ फिर से उपयोग कर सकते हैं उदाहरण के लिए फोन के लिए एक और दूसरे टैबलेट के लिए।

+0

यह सही तरीका है! प्रति गूगल दस्तावेज़! – sandalone

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