13

मैं Android के लिए नया हूँ और मैं निम्नलिखित समस्या का सामना कर रहा हूँ। मैं एंड्रॉइड 2 और 3 दोनों के लिए विकास कर रहा हूं, और यही कारण है कि मैं टुकड़ों का उपयोग करता हूं। हालांकि एंड्रॉइड 2 डिवाइस पर ऐप काम करने के लिए मैं android.support.v4.app.ListFragment आयात करता हूं। स्क्रीन परिवर्तन के अभिविन्यास के दौरान मुझे अपनी सूचीफ्रेमेंट में चयन बनाए रखने की आवश्यकता है। मैं onSaveInstanceState() विधि ओवरराइड कर रहा हूं और बंडल में एक int डाल दिया। जब स्क्रीन घुमाया जाता है, तो इस विधि को बुलाया जाता है और int को बंडल में जोड़ा जाता है। हालांकि जब onActivityCreated() कहा जाता है, तो इसका बंडल शून्य है। मैं एंड्रॉइड वेबसाइट पर प्रदान किए गए उदाहरण का पालन कर रहा हूं: http://developer.android.com/reference/android/app/Fragment.html, लेकिन जैसा ऊपर बताया गया है - onSaveInstanceState() के बाद, onActivityCreated() में बंडल अभी भी शून्य है।एंड्रॉयड ListFragment (onSaveInstanceState में बंडल) को बचाने नहीं करता है/onActivityCreated में बंडल को पुनः प्राप्त नहीं करता है()

import android.support.v4.app.ListFragment; 
public class VisitsHomeFragment extends ListFragment { 
    private int selectedPosition = -1; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if (savedInstanceState != null) { 
      if (savedInstanceState.containsKey("SELECTED_POSITION")) { 
       selectedPosition = savedInstanceState.getInt("SELECTED_POSITION"); 
      } 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("SELECTED_POSITION", selectedPosition); 
    } 
} 

मैं इस समस्या के साथ किसी भी मदद की सराहना करेंगे:

कोड यह रहा।

+0

onRestoreInstanceState() टुकड़ों के लिए उपलब्ध नहीं है। – Maria

+0

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

+0

मैंने नमूना प्रोजेक्ट (हनीकॉम गैलरी) के साथ खेला, इसमें संगतता लाइब्रेरी जोड़ा और सब कुछ ठीक काम किया ... मेरे ऐप में - ऐसा नहीं है। मेरे लिए अस्थायी समाधान 'एंड्रॉइड: configChanges = "ओरिएंटेशन" को मैनिफेस्ट में जोड़ना था, लेकिन यह खोए हुए बंडल के रहस्य को हल नहीं करता है (वास्तव में "द मिस्ट्री ऑफ़ द लॉस्ट बंडल" नामक एक एंडवेंटर पुस्तक लिखने की सोच रहा है। ;-))। – Maria

उत्तर

2

मैं एक ही समस्या थी, और मैं अंत में यह अलग एंड्रॉयड होने के लिए नीचे ट्रैक किया गया: आईडी दो अलग अलग लेआउट (पोर्ट्रेट और लैंडस्केप) में टुकड़ा तत्वों पर विशेषता मान।

+0

हाय, आपके उत्तर के लिए धन्यवाद। दुर्भाग्य से यह मेरे मामले में एक ही समस्या नहीं है। – Maria

7

मैं एक ही समस्या थी, लेआउट फ़ाइल यह समस्या ठीक में टुकड़ा तत्व को android:id जोड़ने।

यह जब एक टुकड़ा पुनः FragmentManager आईडी का उपयोग करता है उचित बंडल भेजने के लिए लगता है।

+0

मुझे मारिया के समान समस्या है, और मेरे पास 'लेआउट' तत्व के लिए परिभाषित 'एंड्रॉइड: आईडी' है जो मेरी लेआउट फ़ाइल में है। यह एक संगतता लाइब्रेरी बग हो सकता है। –

+0

मेरे लिए समस्या एंड्रॉइड में थी: आईडी आपको धन्यवाद – endryha

3

सुनिश्चित करें कि आप Fragment में setRetainInstance(true) बुला नहीं कर रहे हैं। थोड़ा प्रयोग करने के बाद मैंने इसे अपने कोड में त्रुटि के रूप में चिह्नित किया। इसे इस तरह से करने का नकारात्मक तरीका है कि किसी को सभी इंस्टेंस डेटा मैन्युअल रूप से बंडल करना होगा।

विधि कॉल को हटाने और मेरे onSaveInstanceState को मेरे सभी इंस्टेंस चरों को पार्सल करने के लिए अद्यतन करने के बाद, अब मैं रोटेशन पर सूची स्थिति को पुनर्स्थापित कर सकता हूं।

+0

यदि आप सेट करेंइटेनेंस (सत्य) सेट करते हैं तो आपको बिल्कुल एक बंडल की आवश्यकता नहीं है ... फ्रैगमेंट ऑब्जेक्ट कभी नष्ट नहीं होता है और इसके सभी चर समान रहते हैं। – Monstieur

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