मैं बटनों की एक तालिका वाले दृश्य पदानुक्रम को सहेजने और पुनर्स्थापित करने का प्रयास कर रहा हूं। तालिका में आवश्यक तालिका पंक्तियों और बटनों की संख्या रनटाइम तक ज्ञात नहीं है, और मेरे Activity
की onCreate(Bundle)
विधि में एक inflated xml लेआउट में प्रोग्रामेटिक रूप से जोड़ा गया है। मेरा सवाल है: क्या अंतिम तालिका को एंड्रॉइड की डिफ़ॉल्ट दृश्य बचत/कार्यान्वयन बहाल करने के द्वारा सहेजा जा सकता है?सहेजे गए राज्य से दृश्य पदानुक्रम को पुनर्स्थापित करना प्रोग्रामेटिक रूप से जोड़े गए दृश्यों को पुनर्स्थापित नहीं करता है
मेरे वर्तमान प्रयास का एक उदाहरण नीचे है। प्रारंभिक दौड़ पर, तालिका अपेक्षित के रूप में बनाता है। जब गतिविधि नष्ट हो जाती है (डिवाइस को घुमाकर), पुनर्निर्मित दृश्य केवल बच्चों के साथ खाली TableLayout
दिखाता है।
setContentView(int)
में संदर्भित XML फ़ाइल में अन्य चीजों के साथ, खाली TableLayout
शामिल हैं जो बटन जोड़े गए हैं।
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup this activity's view.
setContentView(R.layout.game_board);
TableLayout table = (TableLayout) findViewById(R.id.table);
// If this is the first time building this view, programmatically
// add table rows and buttons.
if (savedInstanceState == null) {
int gridSize = 5;
// Create the table elements and add to the table.
int uniqueId = 1;
for (int i = 0; i < gridSize; i++) {
// Create table rows.
TableRow row = new TableRow(this);
row.setId(uniqueId++);
for (int j = 0; j < gridSize; j++) {
// Create buttons.
Button button = new Button(this);
button.setId(uniqueId++);
row.addView(button);
}
// Add row to the table.
table.addView(row);
}
}
}
मेरे समझ है कि Android, जब तक वे एक आईडी उन्हें सौंपे गए है के रूप में विचारों का राज्य बचाता है, और विचारों को पुनर्स्थापित करता है जब गतिविधि से निर्मित किया गया है, लेकिन अभी यह XML लेआउट और कुछ भी नहीं reinflate करने लगता है अधिक। कोड को डीबग करते समय, मैं पुष्टि कर सकता हूं कि onSaveInstanceState()
तालिका में प्रत्येक Button
पर कॉल किया गया है, लेकिन onRestoreInstanceState(Parcelable)
नहीं है।
यह सही है: ढांचा प्रत्येक दृश्य की स्थिति को बचाता है और पुनर्स्थापित करता है, लेकिन यह कौन सा विचार मौजूद नहीं बचाता है। यही कारण है कि आपको 'saveContentView()' को कॉल करना होगा, भले ही 'savedInstanceState' शून्य न हो, और उसी तरह आपको अपने आप को' onrereate() '(या 'onCreateView()' के टुकड़ों के लिए कोई गतिशील दृश्य बनाना होगा)। ध्यान दें कि यदि आप बाद में विचार जोड़ते हैं (कहें, 'ऑनस्टार्ट()' में), तो उनकी सामग्री को पुनर्स्थापित करने में बहुत देर हो चुकी है। –
तो मूल रूप से, यदि मेरी गतिविधि में उपयोगकर्ता इंटरैक्शन के माध्यम से उत्पन्न कई विचार और टुकड़े हैं, तो मुझे प्रत्येक आईडी, प्रत्येक दृश्य और प्रत्येक प्रकार के टुकड़े को याद रखना होगा? इस choce का कारण क्या है? ऐप की हत्या के दौरान वे सबकुछ क्यों बहाल नहीं करते थे? –
क्या होगा यदि विचारों के दौरान विचारों को जोड़ा नहीं जा सकता है? –