5

में अजीब विकल्प मेनू व्यवहार मेरे पास चार टैब के साथ TabActivity है (प्रत्येक अपनी गतिविधि है)। प्रत्येक टैब अपने onCreateOptionsMenu (और कुछ मामलों में, onPrepareOptionsMenu) को परिभाषित करता है। जब प्रत्येक टैब लोड होता है, तो AsyncTask उस टैब की सूची को पॉप्युलेट करने के लिए आवश्यक डेटा पुनर्प्राप्त करने के लिए लात मार दिया जाता है।एंड्रॉइड टैबएक्टिविटी

यदि मैं टैब के बीच बहुत तेज़ी से स्विच करता हूं (जब वे अभी भी लोड हो रहे हैं) और फिर मेनू बटन दबाएं (जबकि वर्तमान टैब का AsyncApiTask अभी भी चल रहा है), तो मैं गलत विकल्प मेनू प्रकट करने में सक्षम हूं।

उदाहरण के लिए, मान लीजिए कि FooActivity (टैब 1) एक "ताज़ा" आइटम के साथ एक विकल्प मेनू है, और BarActivity (टैब 2) एक आइटम "सभी देखें" के साथ एक विकल्प मेनू है। यदि मैं ऐप (टैब 1 सक्रिय के साथ) शुरू करता हूं, तो जल्दी से टैब 2 पर स्विच करें, और उसके बाद मेनू दबाएं, "ताज़ा करें" आइटम (अपेक्षित "सभी देखें" आइटम) के बजाय कभी-कभी दिखाएगा।

इसके अलावा, जबकि इस अजीब व्यवहार कभी-कभी सिर्फ पहली मेनू प्रेस पर होता है (और बाद में प्रेस सही आइटम दिखाने), कभी कभी यह "अटक जाने" हो जाता है, और जब तक मैं टैब स्विच गलत आइटम हर प्रेस पर दिखाई देंगी।

कोई विचार क्या हो सकता है? मैंने पहले ऐसा नहीं किया है, और कोई अच्छा सुझाव नहीं मिला है।

+0

यह कारणों की असीमित सूची में से एक है कि मैं टैब की सामग्री के रूप में गतिविधियों का उपयोग क्यों नफरत करता हूं। अपने टैब को सरल दृश्य बनाएं, और सक्रिय टैब के आधार पर आपके * एकल * 'onPrepareOptionsMenu()' प्रतिनिधि को कार्यान्वयन के लिए प्रतिनिधि बनाएं। – CommonsWare

+0

आह उत्कृष्ट, यह जानकर बेहद आरामदायक है कि मैं इसका कारण बनने में बहुत कुछ गलत नहीं कर रहा हूं। मैं इस समाधान पर विचार करूंगा। धन्यवाद! – jakeboxer

उत्तर

0

हां, कॉमन्सवेयर सुझाव एक बेहतर समाधान है! आप FragmentTabHost और प्रत्येक टैब के लिए टुकड़े का उपयोग करने पर भी विचार कर सकते हैं। इस तरह मेजबान गतिविधि onTabChanged(String tab) से केंद्रीय रूप से विकल्प मेनू अपडेट कर सकती है।

जबकि AsyncTaskActivity से उत्पन्न होता है, यदि यह onPostExecute(...) नहीं चला है, तो यह अभी भी चल रहा है। साथ ही, चूंकि AsyncTask एस का डिफ़ॉल्ट व्यवहार परिवर्तनीय है (एंड्रॉइड के विभिन्न संस्करण क्रमशः/समानांतर चलते हैं), अपने ThreadPoolExecutor के बिना इसे नियंत्रित करना मुश्किल है। आपका त्वरित Activity स्विचिंग और दोहराया गया AsyncTask एस अवरुद्ध प्रतीत होता है।

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