2011-03-16 13 views
7

से टैब के अंदर गतिविधि के फ़ंक्शन को कैसे कॉल करें मेरे पास तीन टैब के साथ एक टैबहोस्ट है। प्रत्येक एक गतिविधि है। मैं एक बटन चाहता हूं जो एक्शन बार में है, सामान्य बटन वाले शीर्ष पर बार, टैब के कॉल फ़ंक्शंस सक्रिय हैं।एंड्रॉइड: टैबहोस्ट

उदाहरण के लिए, एक ऐड फ़ंक्शन जो प्रत्येक टैब पर कुछ अलग जोड़ सकता है, इस पर निर्भर करता है कि बटन पर क्लिक करने पर कौन सा टैब मौजूद था।

तो, मैं टैबहोस्ट से गतिविधि ए में फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं।

और यदि यह काम नहीं करेगा, तो शायद मैं टैबहोस्ट से डेटाबेस अपडेट कर सकता हूं और फिर टैब सामग्री को रीफ्रेश कर सकता हूं। क्या यह आसान होगा?

आपके लिए समय और समर्थन के लिए धन्यवाद।

उत्तर

7

हाय बस इस पर ठोकर खाई, सुनिश्चित नहीं है कि आपको पहले से ही कोई समाधान मिला है या नहीं?

मैंने हाल ही में इसे हल किया। मैं पहले टैबहोस्ट गतिविधि से प्रसारित करने और उप टैब गतिविधि के भीतर प्रसारण प्राप्त करके समस्या के आसपास हो रहा था। यह मेरे लिए काम करता था लेकिन मुझे यकीन था कि एक "बेहतर" तरीका है।

कुछ इस तरह हो सकता है::

एक क्लीनर तरीका कुछ इस तरह से इसे प्राप्त करने के लिए है - मेरी "कंटेनर" गतिविधि है जो TabHost

  • childActivity रखती है -

    • parentActivity मेरी टैब गतिविधि जिसमें टैब सामग्री और सार्वजनिक विधि है, मैं parentActivity
    • से कॉल करना चाहता हूं

    parentActivity भीतर:

    // a method used for onclick callback or whatever you need. within parentActivity (tabhost) 
    // this will get call huzzah() in the first tab - getChildAt(0) 
    onClick() { 
        childActivity childAct = (childActivity) getTabHost().getChildAt(0).getContext(); 
        childAct.huzzah(); 
    } 
    

    childActivity भीतर:

    // a public method for the parent activity to access 
    public void huzzah() { 
        Log.d("stuff", "huzzah() called"); 
    } 
    

    नोट: एक अन्य वैकल्पिक मुझे विश्वास अपने टैब में गतिविधियों के बजाय दृश्यों का उपयोग करने के लिए नया स्वरूप है। यह एक बेहतर समग्र विकल्प है क्योंकि IIRC स्मृति बुद्धिमान आप केवल 1 गतिविधि स्टैक पर की तुलना में भंडारण कर रहे हैं बल्कि (n * tabs) गतिविधियों की संख्या

    आशा है कि

  • +1

    हाय वायर्ड 00, मैंने इस समाधान को लागू करने का प्रयास किया लेकिन क्लासकास्ट अपवाद प्राप्त कर रहा हूं। मैंने अनिवार्य रूप से आपके कोड की प्रतिलिपि बनाई है, लेकिन यहां मेरी एक प्रति है: \t \t \t खोज सक्रियता childAct = (SearchActivity) getTabHost()। GetChildAt (0) .getContext(); \t \t \t childAct.changeStateTo (1); इस कोड में, SearchActivity क्लास का नाम है, और changeStateTo() सार्वजनिक विधि कहा जा रहा है। कोई सहायता? – Rockmaninoff

    +1

    ऑनक्लिक गलत कोड है। कोई बच्चा गतिविधि नहीं लौटाएं, लेकिन टैबहोस्ट के बच्चे के दृश्य - लीनियरलाइट –

    +0

    हाय @ रॉकमेनिनॉफ, मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपको कोई समाधान मिल रहा है ?? –

    13

    में मदद करता है मैं अपने TabActivity वर्ग के भीतर निम्नलिखित कोड का इस्तेमाल किया

    getTabHost().setCurrentTab(0); 
    Activity MyActivity = this.getCurrentActivity(); 
    MyActivity.myMethod(); 
    

    उम्मीद है कि किसी को इस सवाल का जवाब की तलाश में करने के लिए उपयोगी: स्विच टैब फिर एक सार्वजनिक विधि टैब की गतिविधि में परिभाषित कहते हैं।

    +0

    धन्यवाद, मैं अगली बार कोशिश करता हूं ... – trgraglia

    +1

    यह एक आकर्षण की तरह काम करता है :) दूसरे ने मुझे वह वर्ग दिया है CastException ... – codemonkeybr

    +0

    @dan k: नमस्ते मैं गतिविधियों के 3 इरादों (जो मैं TabHost में जोड़ता हूं) बनाते हैं मुख्य टैबएक्टिविटी। मैंने इस रीफ्रेश बटन के क्लिक पर टैबहोस्ट लेआउट में रीफ्रेश भी किया है, मैं इरादा गतिविधि/धारावाहिक टैब गतिविधि की सूची रीफ्रेश करना चाहता हूं, आम तौर पर सार्वजनिक विधि को आपके जैसा कहा जाता है, लेकिन दूसरे मामले में यह कन्क्स्ट समस्या दिखाता है ... कोई विचार इस? – CoDe

    0

    प्रति पीटर ओ अनुरोध के रूप में संपादित:

    मैं एपीआई 10 पर हूँ, और इस समस्या को मुझे एक विशाल सिर दर्द दे दिया। मेरे पास 3 टैब हैं, मैं चाहता हूं कि वे सभी दूसरे पर बदलावों से अवगत रहें।मेरी समस्या यह थी कि एक बार टैब की गतिविधि शुरू होने के बाद, कोई कॉल वापस नहीं लग रहा था, इसलिए गतिविधि को उपयोगकर्ता ने एक अलग टैब पर स्विच किया, और इस प्रकार यह सुनिश्चित करने के लिए काम करने की आवश्यकता थी कि उसका राज्य सही था।

    मुझे इस समस्या के बहुत सारे जवाब मिल गए, लेकिन कोई भी काम नहीं कर रहा था।

    जिसे मैं अंततः काम करने के लिए मिला था वह इस धागे के लिए # 3 के रूप में पेश किया गया समाधान था - लेकिन यह भी भ्रमित है। मैंने पाया कि getTabHost()। SetCurrentTab (0); कुछ नहीं करता; मैंने OnTabChangeListener() को एक फ़ंक्शन को कॉल करने के लिए लागू किया जो getTabHost()। SetCurrentTab (0) का उपयोग करता है; हालांकि, मुझे getTabHost()। setCurrentTab (0) मिला; ऐप को 0 के अलावा किसी भी टैब के लिए क्रैश करने का कारण बन गया - उदाहरण के लिए, यदि मैंने टैब बी (इंडेक्स = 1) चुना है तो getTabHost()। setCurrentTab (1); ऐप दुर्घटनाग्रस्त हो गया।

    डीबगर का उपयोग करके, मुझे यह कॉल मिला .getCurrentActivity(); हमेशा टैब से जुड़े गतिविधि को वापस लौटाता है जिसे उपयोगकर्ता ने क्लिक किया - कॉलिंग getTabHost()। setCurrentTab(); उस तथ्य को नहीं बदला, और ऐप को दुर्घटनाग्रस्त कर दिया।

    तो मैंने इसे से छुटकारा दिलाया और अब मैं इसे कॉल कर सकता हूं .getCurrentActivity(), फिर उस कॉल द्वारा लौटाए गए एक्टविटी क्लास में एक विधि कॉल करें - यह गतिविधि को यह बताता है कि इसे अपने राज्य को अपडेट करना है - मेरे अगर यह एप्लिकेशन ऑब्जेक्ट का उपयोग कर करता है।

    +1

    यह उत्तर थोड़ा उलझन में है। क्या आप इसे प्रारूपित कर सकते हैं और इसे संपादित कर सकते हैं ताकि यह एक उत्तर के रूप में अकेले खड़ा हो? उदाहरण के लिए, "उपरोक्त कोड" क्या है? (उत्तरों को एक अलग क्रम में क्रमबद्ध किया जा सकता है, ताकि "उपरोक्त" उत्तर का जिक्र गलत हो।) –

    +0

    मैं पीटर से सहमत हूं। एसओ डेरवुड में आपका स्वागत है और उत्तर देने के लिए धन्यवाद लेकिन प्रारूपण सीखने से आपको और अधिक स्वीकार्य होने और बेहतर प्रतिक्रिया प्राप्त करने में मदद मिलेगी। 0 के अलावा टैब पर त्रुटियों के लिए ... किसी और चीज की तरह लगता है त्रुटि उत्पन्न कर रहा है। – trgraglia

    0

    विधि काम नहीं करेगा बुलाने की ऊपर जिस तरह से,

    यहाँ ऊपर समस्या के लिए त्वरित जवाब है:

    getTabHost().setCurrentTab(0);

    Activity myActivity=getCurrentActivity();

    String name=((Tab1) myActivity).et1.getText().toString();

    यहाँ ऊपर दिए गए कोड की गतिविधि के onclick() विधि में दिया गया है TahHost जहां टैब 1 दूसरी प्रतिक्रिया है और et1 टैब 1 गतिविधि में संपादन की पहचान है ताकि आप अलग-अलग क्षेत्रों के सभी मूल्यों को व्यक्तिगत रूप से प्राप्त कर सकें।

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