Uygulamamın rotasyonunu kolay hale getirmeye çalışıyorum, ancak imleci kaydetmede bazı sorunlar yaşıyorum.İmleçim bir yönelim değişikliğinden nasıl kurtulur?
İmleç, ListView
numaralı belgede görüntülenen yaklaşık 13 k + satırlık veri miktarına sahiptir ve bu nedenle yapılandırma her değiştiğinde bir istekte bulunacak olursam oldukça uzun bir süre alır. Benim onRetainNonConfigurationInstance()
benim imleci döndürüyor ve daha sonra getLastNonConfigurationInstance()
aracılığıyla alma.
Ancak, aldığım imleç zaten kapalı görünüyor ve bu nedenle bağdaştırıcım artık listeyi oluşturamıyor. Anladığım kadarıyla, imleç onDestroy()
otomatik olarak tüm imleçleri kapattığından kapatıldı. Birisi ona bakmak istiyorsa ben yığın izlemesi yapıştırarak am
myCursor = (Cursor)getLastNonConfigurationInstance();
if (myCursor == null) {
// Do some stuff here (access DB, etc)
} else { // we are returning from configuration change
// Feed the cursor to the adapter
}
:
@Override
public Object onRetainNonConfigurationInstance() {
return myCursor;
}
Ve böyle geri almak:
böyle İmleç kurtarmak
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): android.database.StaleDataException: Access closed cursor
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217)
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at com.test.sample.helper.DictionaryAdapter.bindView(DictionaryAdapter.java:35)
[........More ListView-related errors here..........]
Kodun içine adım attım ve bunu onRetainNonConfigurationInstance()
'a kadar buldum, imleç hala açık, ancak getLastNonConfigurationInstance()
aracılığıyla alınıyor, zaten kapalı.
Yönlendiricimde yönlendirme değişikliğinden nasıl yararlanabilirim? Yardım için teşekkürler!
DÜZENLEME: Romain'in cevap dayanarak , ben bütün startManagingCursor()
s dışarı yorumladı. Noktaları birleştirip düşünmeliydim! Neyse, uygulamam şimdi bir rotasyondan geçiyor, ancak orijinal oryantasyona geri döndürülmesi hala çöküyor. Hata ayıklamaya devam ediyorum ve ne öğrendiğimi anlatayım.
EDIT2: Yeni hatalara neyin neden olduğunu bulmuş olabilirim. Yeni bir İmleç döndüren bir FilterQueryProvider
uyguladık. Yaptığım şey, o filtrenin sonuçlarını orijinal İmleçime atamaktı. Şimdiye kadar çalışıyor gibi görünüyor.
Evet bana yardım etti! Yönetilen bir imleç kullanıyorum. Tüm 'startManagingCursor()' işlevini denemeye çalıştım ve şimdiye kadar uygulama portretan manzaraya geçerek hayatta kalmayı başardı. Ancak tekrar portreye geri çevirmek uygulamayı kilitler (Neden: java.lang.IllegalStateException: yakın bir SQLiteClosable üzerinde bir referans elde etme girişimi). Daha fazla hata ayıklamaya çalışacağız, ancak bu cevap kesinlikle yardımcı oldu! Teşekkürler Romain! Testlerime ne olursa olsun rapor edeceğim. – Zarah