मेरे एप्लिकेशन शुरू यह एक 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();
}
यह पहली बार काम करता है, लेकिन यदि एक दुर्घटना तब होता है ऐप पहले खंड में लौटता है और दूसरी बार इस विधि को पारित किया जाता है, नया प्रतिस्थापन खंड अर्ध-अदृश्य है। पहले खंड पर बटन पर क्लिक करने से फिर से इस विधि को कॉल किया जाता है और यह अब ठीक है।
स्पष्ट रूप से मैं नहीं चाहता कि ऐप क्रैश हो जाए, इसलिए ऐसा नहीं होना चाहिए, लेकिन मुझे यह महसूस हो रहा है कि मैं अपना कोड कैसे लिख रहा हूं इसमें कुछ गड़बड़ है।
यह एक उत्तर से टिप्पणी होना चाहिए। –
नहीं, यह नहीं है, यह भी एक उत्तर होने के लिए उपयुक्त है। – Zyoo
मेरी समस्या मेरे सारांश की एक्सएमएल लेआउट फ़ाइल में होलोग्राफ तत्व (चार्ट ड्राइंग के लिए एक छोटी लाइब्रेरी) में पृष्ठभूमि विशेषता के साथ थी। मैंने उस विशेषता को हटा दिया और यह काम किया। टुकड़े को रीफ्रेश करने के लिए, मैं अलग होने के बाद अपने टुकड़े को प्रतिस्थापित कर रहा था, लेकिन वास्तव में मुझे टुकड़े को बदलने की जरूरत नहीं थी, मुझे केवल अलग करने की आवश्यकता थी, संलग्न करें (खंड को चालू करें, देखें और प्रतिबद्ध करें। यदि आपके पास एक समान समस्या है और आपको अपने टुकड़े में डेटा पास करना है, तो मैं परिवर्तन का सुझाव देता हूं जहां आप खंड को बंडल से डेटा को किसी अन्य वर्ग में कुछ फ़ील्ड में संग्रहीत करते हैं। उन्हें टुकड़े के क्रिएटिव्यू में एक्सेस करें। – Metallica