2011-12-20 3 views
8

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

मेरे पास मुख्य एक्टिविटी है, जो दो टुकड़े एक तरफ प्रदर्शित करती है। टुकड़े में से एक में मैं एक बटन है और बटन के लिए टुकड़े लेआउट एक्सएमएल में परिभाषित

android:onClick="buttonClicked" 

अब मुझे लगता है कि विधि

public void buttonClicked(View view) 

लागू करने के लिए मैं मान लिया है इस लागू किया जाना है कि होगा चाहते हैं FragmentA.java में और MainActivity.java में नहीं। लेकिन यह केवल तभी काम करता है जब वह विधि MainActivity.java में लागू की जाती है। ऐसा क्यों है? मेरे लिए जो समझ में नहीं आता है। प्री हनीकॉम्ब एक गतिविधि से संबंधित एक विधि उस गतिविधि में रुक गई, अब एक टैबलेट पर मैं कई गतिविधियों को एक मुख्य क्रियाकलाप में विलय कर रहा हूं और सभी अलग-अलग तरीकों को विलय कर दिया गया है? उदाहरण के लिए आप FragmentA.java में जो कुछ भी डालते हैं? क्या होगा यदि आपको अपनी गतिविधि शुरू करनी है क्योंकि यह ऐप एक हैंडहेल्ड पर चलता है, तो ऑनक्लिक विधि मुख्य गतिविधि में नहीं है बल्कि गतिविधि में जिसे तब कहा जाना चाहिए। मैं इस समय बहुत उलझन में हूं ...

+0

हो सकता है क्योंकि टुकड़ा लेआउट xml मुख्य गतिविधियों संदर्भ का उपयोग करके फुलाया जाता है। चलो देखते हैं कि दूसरों का क्या जवाब होगा। – blessenm

+0

आपका क्या मतलब है "यह केवल तभी काम करता है जब विधि 'MainActivity.java'' में लागू की जाती है। क्या आपको कोई त्रुटि मिलती है, या क्या आपका कोड आपको वह परिणाम नहीं देता है जिसकी आप उम्मीद कर रहे हैं? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity यहां एक ही प्रश्न का उत्तर दिया गया है। – kzotin

उत्तर

4

मुझे यकीन नहीं है कि विशिष्ट समस्या क्या है, लेकिन शायद इससे मदद मिलेगी।

Android दस्तावेज़ से Fragment पर रों:

आप एक मॉड्यूलर और पुन: प्रयोज्य गतिविधि घटक के रूप में प्रत्येक खंड डिजाइन चाहिए। ऐसा इसलिए है, क्योंकि प्रत्येक टुकड़ा अपने स्वयं के लेआउट और अपने व्यवहार को अपने जीवन चक्र कॉलबैक के साथ परिभाषित करता है, आप कई गतिविधियों में एक टुकड़ा शामिल कर सकते हैं, इसलिए आपको पुन: उपयोग के लिए डिज़ाइन करना चाहिए और एक टुकड़े को एक और टुकड़े से सीधे छेड़छाड़ से बचाना चाहिए।

यही है, आपको कभी भी किसी अन्य टुकड़े से एक टुकड़ा में हेरफेर नहीं करना चाहिए; बल्कि, यह अंतर्निहित गतिविधि के माध्यम से किया जाना चाहिए। अधिक जानकारी के लिए इस article में "गतिविधि में ईवेंट कॉलबैक बनाना" अनुभाग पढ़ें (यह महत्वपूर्ण सामग्री है !!)।

दूसरी ओर, आप बटन Fragment के भीतर ही कोई कार्रवाई करने के चाहते हैं (यानी अगर आप टुकड़ा के भीतर एक TextView का पाठ बदलने के लिए एक Button क्लिक चाहते थे), तो आपको Fragment में इस को लागू करना चाहिए, Activity नहीं (ऐसा इसलिए है क्योंकि परिणामी व्यवहार Fragment के भीतर निहित है और उसके पास माता-पिता Activity के साथ कुछ लेना देना नहीं है)।

एक टिप्पणी छोड़ दो और मैं स्पष्ट कर सकते हैं अगर मेरी पोस्ट भ्रामक है ... मैं हाल ही में Fragment के अपने आप को समझने के लिए :) शुरू कर दिया।

+4

मैं पुष्टि कर सकता हूं कि एंडी एंड्रॉइड की चिंता अच्छी तरह से स्थापित है। और मुझे TabHost और एकाधिक FragmentActivity के साथ एक ही समस्या है। असल में, लेआउट में कॉल की जाने वाली मेरी ऑनक्लिक विधि उस विधि को टैबहोस्ट क्लास में परिभाषित करने की अपेक्षा कर रही है, न कि फ्रैगमेंट। इसलिए बड़ी समस्या है। –

+0

हो सकता है कि मैं सही ढंग से पढ़ नहीं रहा हूं, इसे उत्तर के रूप में चिह्नित किया गया है, लेकिन श्रोताओं को प्रोग्रामेटिक रूप से बनाने के बिना मैं टुकड़े के अंदर 'ऑनक्लिक' श्रोता कैसे बना सकता हूं? – katit

0

खैर,

मैं इसे एंड्रॉयड संदर्भ संरचना के पदानुक्रम से संबंधित है लगता है। गतिविधि सभी बच्चों के विचारों का मेजबान है और इसलिए आप कह सकते हैं कि टुकड़ा वास्तव में अपने मेजबान के संदर्भ का उपयोग कर रहा है। और यही कारण है कि जब आप खंड प्रणाली का उपयोग करते हैं तो हमेशा खंड की मेजबान गतिविधि में इसकी खोज करते हैं।

इसे जांचें। Android developer onClick attribute description

मैंने एक चीज़ की जांच नहीं की है लेकिन आप एक परीक्षण कर सकते हैं। टुकड़े की बजाय मेजबान गतिविधि में कार्यान्वयन प्रदान करके, लेकिन खंड का उपयोग लेआउट फ़ाइल पर क्लिक करें। इसे माता-पिता की विधि को कॉल करना चाहिए।