जवाबों:
यदि आप TextView
अपनी स्थिति को बचाने के लिए अपने बल को जोड़ना चाहते हैं, तो आपको freezesText
विशेषता जोड़ना होगा :
<TextView
...
android:freezesText="true" />
प्रलेखन पर से freezesText
:
यदि सेट किया जाता है, तो पाठ दृश्य में मेटा-डेटा जैसे कि वर्तमान कर्सर स्थिति के अलावा इसके जमे हुए icicle के अंदर अपना वर्तमान पूर्ण पाठ शामिल होगा। डिफ़ॉल्ट रूप से यह अक्षम है; यह तब उपयोगी हो सकता है जब किसी सामग्री प्रदाता जैसे किसी स्थायी स्थान पर पाठ दृश्य की सामग्री संग्रहीत न हो
अभिविन्यास परिवर्तन पर डेटा बनाए रखने के लिए आपको दो तरीकों को लागू करने की आवश्यकता है:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Read values from the "savedInstanceState"-object and put them in your textview
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Save the values you need from your textview into "outState"-object
super.onSaveInstanceState(outState);
}
1) एक आईडी के साथ सभी दृश्य अपने राज्य को नहीं बचाते हैं। एंड्रॉइड विजेट, एक आईडी के साथ, जिसका राज्य उपयोगकर्ता द्वारा बदला जा सकता है, एक नरम मार पर अपने राज्य को बचाने के लिए दिखाई देते हैं। इसलिए EditText अपने राज्य को बचाता है, लेकिन TextView एक नरम मार पर अपने राज्य को नहीं बचाता है।
"AFAIK, एंड्रॉइड केवल उन चीज़ों के लिए राज्य को बचाता है जो बदलने की उम्मीद कर रहे हैं। यही कारण है कि यह टेक्स्ट को एक EditText (जो एक उपयोगकर्ता को बदलने की संभावना है) में बचाता है और शायद एक TextView (जो आम तौर पर स्थिर रहता है) के लिए राज्य को नहीं बचाता है ) "
मार्क एम
तो आप onSaveInstanceState में टेक्स्टव्यू की स्थिति को बचाने का विकल्प चुन सकते हैं और आप ऑनक्रिएट में टेक्स्टव्यू की स्थिति को पुनर्स्थापित करना चुन सकते हैं।
2) सबसे अच्छा अभ्यास "आंतरिक" गैर-दृश्य उदाहरण स्थिति को बचाने के लिए है, भले ही आप घोषणा करें
android:configChanges= "orientation|keyboardHidden"
डॉक्स से:
"हालांकि, आपका एप्लिकेशन हमेशा अपनी पिछली स्थिति के साथ ही शटडाउन और रीस्टार्ट करने में सक्षम होना चाहिए। न केवल इसलिए क्योंकि अन्य कॉन्फ़िगरेशन परिवर्तन हैं जो आप अपने एप्लिकेशन को पुनरारंभ करने से नहीं रोक सकते हैं, लेकिन साथ ही घटनाओं को संभालने के लिए भी जैसे कि उपयोगकर्ता को एक इनकमिंग प्राप्त होता है। फोन कॉल और फिर आपके आवेदन पर लौटता है। ”
जेएएल
एंड्रॉइड आपके लिए उस तरह का सामान नहीं संभालता है। आपके पास सभी डेटा को मैन्युअल रूप से सहेजना है।
मूल्यों को बचाने के लिए आप किसी गतिविधि में उपयोग कर सकते हैं
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
और सहेजे गए ऑब्जेक्ट्स को लोड करने के लिए किसी गतिविधि की ऑनक्रीट पद्धति में कुछ इस तरह का उपयोग करें
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
आप किसी गतिविधि के लिए अक्षम अभिविन्यास परिवर्तन भी चुन सकते हैं
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
अपनी गतिविधि / गतिविधियों में इसे जोड़कर अभिविन्यास परिवर्तन व्यवहार को ओवरराइड करने के लिए AndroidManifest.xml में अपनी गतिविधियों को संशोधित करें:
android:configChanges="orientation|keyboardHidden"
यह कुछ इस तरह दिखना चाहिए:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
AndroidManifest.xml करने के लिए इन जोड़े
के स्थान पर अपनी गतिविधि का नाम रखो ACTIVITY_NAME
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
यह वैल्यू चेंजिंग टेक्स्टफिल्ड के साथ भी काम करेगा।
बस जोड़ दो
android:configChanges="orientation|screenSize"
AndroidManifest.xml में अपनी गतिविधि के लिए।
जब कॉन्फ़िगरेशन बदलता है तो एंड्रॉइड डिफ़ॉल्ट रूप से आपकी गतिविधि को पुनरारंभ करता है। इसे बदलने के लिए आपको onConfigurationChanged()
विधि को ओवरराइड करना चाहिए । साथ ही, आपको जोड़ना चाहिएandroid:configChanges
अपनी मैनिफ़ेस्ट फ़ाइल में ।
आप यहाँ और पढ़ सकते हैं ।
मैंने भी इस्तेमाल किया
android:configChanges="orientation"
और यह काम नहीं किया।
लेकिन तब मुझे एक उपाय मिला।
सत्यापित करें कि क्या आपके पास अपने मैनिस्ट में सही लाइन है:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
सुनिश्चित करें कि यह कुछ नहीं पढ़ता है
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
मेरे पास पहले स्थान पर यह दूसरा तरीका था लेकिन जब मैंने इसे सही किया तो राज्य संरक्षित हो गया।