Yönelim değişikliği konusunda uygulamamda garip bir davranışı var.Yönlendirmeden sonraki ikinci aktivite örneği
normal davranışı: Ben uygulamasını açtığınızda
benim ev etkinliği başlatır. Bir sonraki etkinliğe (bir galeriye) gittiğimde, normal olarak başlatılır (sürgülü animasyon ile sağdan sola). Geri tuşu kullanarak geri döndüğümde, geçerli etkinlik (galeri) bitiyor (soldan sağa kaydırmalı bir animasyonla).
tuhaf davranış: Ben dikey modda uygulamayı başlatma ve yatay yönünü değiştirmek ediyorum
- . Sonra ev aktivitesinin ikinci bir örneği gibi bir şey var. Ardından, yatay modda geri düğmesine basmak, uygulamayı yönlendirme değişikliği olmadan yapacağı gibi kapatmaz (ev etkinliği benim uygulamasındaki ilk etkinliktir) ancak daha soldan sağa kayma animasyonu yapar (yeni bir etkinlik başlatmak gibi) ve ev aktivitesini (ama bence başka bir örneği) tekrar gösterir. Geri düğmesine ikinci kez basmak uygulamayı kapatır.
- Uygulamayı yatay modda başlattığımda ve yönlendirmeyi dikey moda geçirdiğimde, geri düğmesine basıp sağdan sola slayt animasyonu (bir etkinliği kapama gibi) elde edersiniz ve ev etkinliğini tekrar gösterir.
- Uygulamayı başlattığımda ve portre yönünü değiştirmek için iki yönlendirme yaptığımda, geri düğmesi uygulamayı gerektiği gibi kapatır.
Yani manzara gibi ve portre modu iki farklı etkinlik gibi ele alınır.
android:configChanges="orientation|keyboardHidden|screenSize"
kullanmayın, bu nedenle bir yön değişikliği normal android etkinlik yaşam döngüsünü takip etmeli ve etkinliğin "eski" portre (veya manzara) sürümünü yok etmelidir.
Etkinliklerim FragmentActivity
'dan devralınır. onSaveInstanceState
kullanıyorum, parceable (etkinlik için herhangi bir başvuru içermiyor) geçiriyorum ve onRetainCustomNonConfigurationInstance
(read here) kullanarak çeşitli AsyncTask
s geçmek için kullanıyorum. Ancak bu görevlerdeki tüm başvurular (varsa) onRetainCustomNonConfigurationInstance
'da yok edilir ve getLastCustomNonConfigurationInstance
'dan sonra (yeni oluşturulan etkinlikle) geri yüklenir.
Bu davranışa neyin neden olabileceği hakkında bir fikrin var mı?
DÜZENLEME: Manifest-Dosya
Eylem Deklarasyonu:
<activity android:name=".activities.smartphone.HomeSmartphone" android:label="@string/app_name"></activity>
HomeSmartphone Ev uzanır
Ev MyFragmentActivity
MyFragmentActivity uzanır
yılında android.support.v4.app.FragmentActivity uzanır MyFragmentActivity sadece onCreate, onRestart, onStart, onSaveInstanceState, onPause, onResu'da bazı günlük oluşturma/izleme şeyler yapıyorum Ben sadece, uygulama içeriğine bir referans tutan bir izleme sınıfının bazı statik yöntemlerini çağırarak, OnStop, onDestroy. Faaliyet bağlamına değil.
Home, HomeSmartphone ve HomeTablet tarafından genişletilen soyut bir sınıftır.Bu iki sınıf, farklı düzenlerde sadece bazı özel yükleme/ferahlatıcı/inisiyasyon yapar.
En çok görev soyut Home sınıfında yapılır.
public HomeRetainedObjects retained = new HomeRetainedObjects();
public boolean adIsShown = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.home);
Log.i("DEBUG", "onCreate(Home)");
if (savedInstanceState != null) {
this.adIsShown = savedInstanceState.getBoolean("adIsShown");
}
// write/update values in shared preferences
this.initPreferences();
// recover retained objects (mostly AsyncTasks)
this.recoverRetained();
// show content/refresh content
this.init();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("adIsShown", this.adIsShown);
Log.i("DEBUG", "onSaveInstanceState(Home)");
}
public void recoverRetained() {
Object retained = this.getLastCustomNonConfigurationInstance();
if (retained instanceof HomeRetainedObjects) {
this.retained = (HomeRetainedObjects) retained;
if (this.retained.loadMessageTask != null) {
this.retained.loadMessageTask.restoreContext(this);
}
}
}
@Override
public Object onRetainCustomNonConfigurationInstance() {
if (this.retained.loadMessageTask != null) {
this.retained.loadMessageTask.destroyContext();
}
return this.retained;
}
Umarım bu yardımcı olur mu ?!
kodunuzu bize göster ... –
... manifestosunda faaliyet beyanı, plz. Bize çabalarınızı gösteren iyi bir soru için – Turnsole
+1 –