2013-03-20 6 views
20

के लिए बनाए रखना बंद कर देते हैं मैं कस्टमView जो गतिशील रूप से एक ही गतिविधि में कई बार जोड़ा जाता है की है।एंड्रॉयड दृश्य निहित राज्य कुछ दृश्य

प्रत्येक कस्टम व्यू इंस्टेंस में अन्य सामान TextView बच्चे के बगल में है। TextView में यह आईडी है और यह प्रत्येक दृश्य उदाहरण के लिए समान है।

प्रत्येक कस्टम दृश्य उदाहरण के लिए, जब गतिविधि बनाई जाती है तो TextView के लिए अलग Text सेट करता है। जब मैं स्क्रीन को घुमाता हूं, गतिविधि को फिर से बनाया जाता है लेकिन अब प्रत्येक TextView समान Text प्रदर्शित करता है (पाठ अंतिम उदाहरण के पाठ के समान है)।

इसका कारण यह है बचाने के लिए और उदाहरण के लिए राज्य के बहाल स्वचालित रूप से कुछ जानकारी बचाता है, लेकिन इस जानकारी को स्पष्ट रूप से आईडी से जुड़ा हुआ है और मेरे मामले में समस्या पैदा करता है।

क्या विशिष्ट विचारों के लिए स्वचालित स्थिति को बनाए रखने का कोई तरीका है?

क्या कोई संपत्ति या सेटिंग या कुछ कामकाज है?

उत्तर

38

आप View.setSaveEnabled (boolean enabled) विधि का उपयोग कर सकते हैं।

यह भी स्वत: राज्य saveEnabled विशेषता android:saveEnabled="false"

+0

मैं वास्तव में क्या जरूरत है और यह काम करता है! धन्यवाद! – Dusan

+0

लाइफसेवर उत्तर! महान! –

+0

मेरे मामले में 'रीसाइक्लिंग व्यू' को 'स्प्रेग्रेड व्यूअर' को 'स्प्रेग्रेड व्यू' को 'स्प्रेग्रेड व्यू' को रोकने के लिए भी मददगार है, जो गलत स्पैन गिनती के साथ पुनर्स्थापित करने पर 'ArrayIndexOutOfBoundsException'' के साथ अभिविन्यास परिवर्तन और क्रैशिंग को सहेज रहा है। – 0101100101

1

का उपयोग कर यदि आप लागू की जरूरत है xml के माध्यम से बचत को निष्क्रिय किया जा सकता है सभी पदानुक्रम के लिए setSaveEnabled:

public static void SaveEnableViewAndChildren(this View view, bool val) 
    { 
     if (view == null) 
      return; 
     view.SaveEnabled = val; 

     var viewGroup = view as ViewGroup; 
     if (viewGroup == null) 
      return; 
     for (int i = 0; i < viewGroup.ChildCount; i++) 
      SaveEnableViewAndChildren(viewGroup.GetChildAt(i), val); 
    } 
संबंधित मुद्दे