2013-05-19 7 views
9

मेरे एप्लिकेशन शुरू यह एक AsyncTask चलाता है लोड करने के लिए और फिर onPostExecute में, मैं तो नए जमाव के setContentView तो एक जोड़ने FragmentTransaction द्वारा दो मोड की पेशकश दो बटन के साथ एक टुकड़ा जोड़ें। दो मोडों में से एक के बाद क्लिक किया गया है, फिर यह प्रतिस्थापन विधि का उपयोग कर खंड को फिर से FragmentTransaction के साथ बदल देता है।बदला टुकड़ा अभी भी दिखाई दे

यदि ऐप क्रैश हो जाता है तो यह पहली स्क्रीन पर लौटता है, दो बटनों को दो बटनों को लोड करता है। इस मामले में यदि कोई भी मोड चुना गया है, तो दूसरा खंड लोड हो गया है लेकिन अब पृष्ठभूमि अचानक दो बटन दिखा रही है और वे क्लिक करने योग्य हैं। यदि वे फिर से क्लिक किए जाते हैं तो वे टुकड़े को सही ढंग से प्रतिस्थापित करते हैं ताकि यह नीचे दिखाई न दे। यह सिर्फ अजीब है, मैं समझ नहीं पा रहा हूं कि इसका कारण क्या हो सकता है।

मैंने इन दो समान प्रश्नों, one और two पर शोध और देखा है, जो सुझाव दिया है कि ऐसा इसलिए हो सकता है क्योंकि आईडी गलत है या मैंने XML में खंड को परिभाषित किया है। इन दो कारकों में से कोई भी मामला नहीं है।

मेरे कोड नीचे दिखाया गया है:

नीचे मैं लोड हो रहा है स्क्रीन की जगह।

@Override 
    protected void onPostExecute(Void result) { 
     setContentView(R.layout.activity_main_screen); 
     FragmentTransaction transaction = getSupportFragmentManager() 
       .beginTransaction(); 
     transaction.add(R.id.fragment_container, new ModeFragment()) 
       .commit(); 
      } 

, जो जब एक बटन क्लिक किया जाता है मैं टुकड़ा पारित करने के बाद मैं नीचे इस विधि में के साथ वर्तमान को बदलने के लिए चाहते हैं:

private void replaceCurrentFragment(Fragment fragment) { 
    FragmentTransaction transaction = getSupportFragmentManager() 
      .beginTransaction(); 
    transaction.replace(R.id.fragment_container, fragment) 
      .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
      .addToBackStack(null).commit(); 
} 

यह पहली बार काम करता है, लेकिन यदि एक दुर्घटना तब होता है ऐप पहले खंड में लौटता है और दूसरी बार इस विधि को पारित किया जाता है, नया प्रतिस्थापन खंड अर्ध-अदृश्य है। पहले खंड पर बटन पर क्लिक करने से फिर से इस विधि को कॉल किया जाता है और यह अब ठीक है।

स्पष्ट रूप से मैं नहीं चाहता कि ऐप क्रैश हो जाए, इसलिए ऐसा नहीं होना चाहिए, लेकिन मुझे यह महसूस हो रहा है कि मैं अपना कोड कैसे लिख रहा हूं इसमें कुछ गड़बड़ है।

उत्तर

11

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

आपके लिए बिल्कुल वही बात नहीं हो सकती है, लेकिन यह आपको इसे समझने में मदद कर सकती है।

+1

यह एक उत्तर से टिप्पणी होना चाहिए। –

+7

नहीं, यह नहीं है, यह भी एक उत्तर होने के लिए उपयुक्त है। – Zyoo

+0

मेरी समस्या मेरे सारांश की एक्सएमएल लेआउट फ़ाइल में होलोग्राफ तत्व (चार्ट ड्राइंग के लिए एक छोटी लाइब्रेरी) में पृष्ठभूमि विशेषता के साथ थी। मैंने उस विशेषता को हटा दिया और यह काम किया। टुकड़े को रीफ्रेश करने के लिए, मैं अलग होने के बाद अपने टुकड़े को प्रतिस्थापित कर रहा था, लेकिन वास्तव में मुझे टुकड़े को बदलने की जरूरत नहीं थी, मुझे केवल अलग करने की आवश्यकता थी, संलग्न करें (खंड को चालू करें, देखें और प्रतिबद्ध करें। यदि आपके पास एक समान समस्या है और आपको अपने टुकड़े में डेटा पास करना है, तो मैं परिवर्तन का सुझाव देता हूं जहां आप खंड को बंडल से डेटा को किसी अन्य वर्ग में कुछ फ़ील्ड में संग्रहीत करते हैं। उन्हें टुकड़े के क्रिएटिव्यू में एक्सेस करें। – Metallica

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