2012-06-25 8 views
7

मैं एक लेआउट (ऑनक्लिक बटन विधि) पर गतिशील रूप से निर्मित EditTexts जोड़ रहा हूं। जब मैं स्क्रीन घुमाता हूं तो अतिरिक्त एडिटेक्स गायब हो जाते हैं। मैं उन्हें सहेजे गए इंस्टेंसस्टेट विधि में रखने के लिए उन्हें एक बंडल में कैसे जोड़ सकता हूं? या, ऐसा करने का कोई और तरीका है? मुझे पता है कि मैं पाठ को सहेज सकता हूं, लेकिन जब मैं इसे घुमाता हूं तो स्क्रीन लेआउट रखने का कोई तरीका है? यदि उपयोगकर्ता बटन दबाता है और पांच एडिटटेक्स जोड़ता है (बिना किसी टाइपिंग के या बिना) मुझे स्क्रीन को घुमाए जाने पर इस लेआउट को सहेजने की ज़रूरत है (मुझे मूल रूप से डमी-सबूत मेरे ऐप की आवश्यकता है :))।बंडल में एक दृश्य कैसे डालें

अग्रिम धन्यवाद!

+1

मुझे लगता है कि मुझे मिल गया! मैं स्ट्रिंग को edittexts से बंडल में सहेज लेगा, और तब स्क्रीन घुमाने पर नए संपादनों को पॉप्युलेट करेगा। तुम लोग मेरी याददाश्त करते थे। – TheCommander

उत्तर

9

आप नहीं क्योंकि वे parcelable/serializable नहीं हैं एक बंडल के लिए विचारों को जोड़ सकते हैं द्वारा जोड़ लिया है। एकमात्र चीजें जो आप कर सकते हैं और बंडल में सहेजना चाहिए गतिविधि की वर्तमान स्थिति है।

आप एक सूची डेटा संरचना या काउंटर वैरिएबल बनाए रख सकते हैं जो गतिशील रूप से बनाए गए दृश्यों का ट्रैक रखता है। EditTexts के स्ट्रिंग मानों को भी सहेजें। ऑनक्रेट में आपको विचारों और उनके राज्यों को फिर से बनाने के लिए उस जानकारी की व्याख्या करनी चाहिए।

+0

मैं काउंटर वैरिएबल कैसे बनाऊंगा? मेरे पास ऑनक्लिक श्रोता नहीं है; मेरे पास मेरी एक्सएमएल फ़ाइल में ऑनक्लिक विधि है। क्या मैं स्ट्रिंग को सरणी में सहेज सकता हूं, और उसके बाद edittexts बनाने के लिए लूप के लिए उपयोग कर सकता हूं और सरणी तत्वों के माध्यम से अनुक्रमण करके तार जोड़ सकता हूं? – TheCommander

+0

चूंकि Google ProGuard के माध्यम से कोड संपीड़न और obfuscation के उपयोग की अनुशंसा करता है, इसलिए आपको एक्सएमएल में ईवेंट हैंडलर को परिभाषित नहीं करना चाहिए (जब तक आप ProGuard कॉन्फ़िगरेशन फ़ाइल में विधि नामों की रक्षा नहीं करते)। अपने कोड में ऑनक्लिक ईवेंट हैंडलर सेट/बनाएं। मैं बिल्कुल नहीं जानता कि आप इन संपादन टेक्स्ट कैसे बना रहे हैं। अगर उनके पास कुछ फैंसी पोजिशनिंग लागू नहीं है, तो आपको वास्तव में इन टेक्स्टटेक्स को फिर से बनाने के लिए क्रिएटिव इंस्टेंसस्टेट बंडल से उस स्ट्रिंग सरणी सूची पर अपने टेक्स्ट मानों को सहेजने और फिर से सक्रिय करने की आवश्यकता है। – tiguchi

0

दृश्य स्वयं ही उस जानकारी का प्रतिनिधित्व नहीं करता है जिसे आपको सहेजने की आवश्यकता है। इसके बजाय आपको अपने निर्देशांक, चौड़ाई, ऊंचाई, मूल्य इत्यादि को सहेजना चाहिए

1

आप एक दृश्य सहेज नहीं सकते हैं। बंडल सिर्फ एक जोड़ी नाम-मूल्य है। बेशक आप पाठ को सहेज सकते हैं और फिर इसे फिर से प्रस्तुत कर सकते हैं। जिस तरह से आपने कहा है।

onsaveInsatnceState (बंडल सेव) पाठ को save.putString ('text1', 'bla bla') के रूप में सहेजें, निश्चित रूप से आपको अपने सभी संपादन को सहेजने के लिए एक लूप की आवश्यकता है।

तो oncreated में (बंडल बचाने के लिए)

आप प्राप्त कर सकते हैं कि आप क्या save.getString ('टेक्स्ट 1')

+0

मुझे पता है कि मैं पाठ को सहेज सकता हूं, लेकिन जब मैं इसे घुमाता हूं तो स्क्रीन लेआउट रखने का कोई तरीका है? यदि उपयोगकर्ता बटन दबाता है और पांच एडिटटेक्स जोड़ता है (बिना किसी टाइपिंग के या बिना) मुझे स्क्रीन को घुमाए जाने पर इस लेआउट को सहेजने की ज़रूरत है (मुझे मूल रूप से डमी-सबूत मेरे ऐप की आवश्यकता है :))। क्षमा करें अगर मैं चाहता था कि स्पष्ट नहीं था। धन्यवाद! – TheCommander

+1

चिंता मत करो। लेकिन दुर्भाग्यवश आप दृश्यों को सहेज नहीं सकते हैं, आप संपादन टेक्स्ट और टेक्स्ट की संख्या को सहेज सकते हैं और इस जानकारी का उपयोग करके लेआउट को फिर से जोड़ सकते हैं। मुझे लगता है कि यह एकमात्र समाधान है। – Xenione

0

आप अपने व्यू डेटा को कक्षा में या सरणी में सहेज सकते हैं। जब आपकी खंड गतिविधि पुन: प्रारंभ हो जाएगी, तो आप बचत कार्य से डेटा को प्रारंभिक कार्य में लाएंगे।

इस फ़ंक्शन सेट का उपयोग करें रीटेन इंस्टेंस (सत्य)। चीज समारोह का उपयोग करने के बाद आपकी टुकड़ा गतिविधि नष्ट नहीं होगी।