Yanıtlar:
TextView
Durumunuzu kaydetmeye zorlamak istiyorsanız, freezesText
öznitelik eklemeniz gerekir :
<TextView
...
android:freezesText="true" />
Aşağıdaki belgelerden freezesText
:
Ayarlanırsa, metin görünümü, mevcut imleç konumu gibi meta verilere ek olarak, mevcut tam metnini dondurulmuş buz sarkıtının içinde içerecektir. Varsayılan olarak bu devre dışıdır; bir metin görünümünün içeriği, içerik sağlayıcı gibi kalıcı bir yerde saklanmadığında yararlı olabilir
Oryantasyon değişikliğiyle ilgili verileri saklamak için iki yöntemi uygulamanız gerekir:
@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) Kimliği olan tüm görünümler durumlarını kaydetmez. Durumu kullanıcı tarafından değiştirilebilen bir kimliğe sahip Android widget'ları, durumlarını bir yumuşak öldürmede kaydediyor gibi görünüyor. Böylece, EditText durumunu kaydeder, ancak TextView durumunu yumuşak öldürmede kaydetmez.
"AFAIK, Android yalnızca değişmesi beklenen şeyler için kaydetme durumunu rahatsız eder. Bu nedenle, metni bir EditText'e (kullanıcının değişmesi muhtemeldir) kaydeder ve belki de bir TextView için durumu kaydetmez (normalde statik kalır ) "
Mark M
Böylece, metin görünümünün durumunu onSaveInstanceState'e kaydetmeyi seçebilir ve metin görünümünün durumunu onCreate'e geri yüklemeyi seçebilirsiniz.
2) En iyi uygulama, beyan etseniz bile "dahili" görüntüleme dışı örnek durumunu kaydetmektir.
android:configChanges= "orientation|keyboardHidden"
Dokümanlardan:
"Ancak, uygulamanız her zaman önceki durumuna dokunulmadan kapanabilmeli ve yeniden başlayabilmelidir. Yalnızca uygulamanızı yeniden başlatmasını engelleyemeyeceğiniz başka yapılandırma değişiklikleri olduğu için değil, aynı zamanda kullanıcının bir gelen aldığında olduğu gibi olayları işlemek için de telefon görüşmesi ve ardından uygulamanıza geri döner. "
JAL
Android bu tür şeyleri sizin için işlemez. Tüm verileri manuel olarak kaydettiniz.
Değerleri kaydetmek için bir aktivitede kullanabilirsiniz
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
ve kaydedilen nesneleri yüklemek için bir etkinliğin oncreate yönteminde buna benzer bir şey kullanın
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
bir etkinlik için yön değişikliğini devre dışı bırakmayı da seçebilirsiniz
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Yön değişikliği davranışını geçersiz kılmak için AndroidManifest.xml'deki etkinliklerinizi, bunu etkinliğinize / etkinliklerinize ekleyerek değiştirin:
android:configChanges="orientation|keyboardHidden"
Biraz şuna benzemeli:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
AndroidManifest.xml bunları ekleyin
yerine Etkinlik Adı koy ACTIVITY_NAME
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
Bu, değer değiştiren TextField ile de çalışacaktır.
sadece ekle
android:configChanges="orientation|screenSize"
AndroidManifest.xml'deki Etkinliğinize.
Yapılandırma değiştiğinde, Android varsayılan olarak etkinliğinizi yeniden başlatır. Bunu değiştirmek için onConfigurationChanged()
yöntemi geçersiz kılmalısınız. Ayrıca, android:configChanges
manifest dosyanıza eklemelisiniz .
Daha fazlasını buradan okuyabilirsiniz .
Ben de kullandım
android:configChanges="orientation"
ve işe yaramadı.
Ama sonra bir çözüm buldum.
Manestinizde aşağıdaki satırın doğru olduğunu doğrulayın:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
gibi bir şey okumadığından emin ol
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
İlk etapta ikinci yol vardı ama düzelttiğimde durumu korundu.