A, B, C, D adlı etkinlikleri içeren bir uygulama olduğunu varsayalım. Şimdi, A'nu kök aktivitesi olarak başlattık ve A, B'den başlatıldı ve B, B'den başlatıldı ve C, C'den başlatıldı. Şimdi, D faaliyetinde "Kaldır" adlı bir düğmem var. D aktivitesinde "Kaldır" düğmesine bastığımda, B etkinliği ve C etkinliği de geçmiş yığınından kaldırılmalıdır. On (Geri) tuşuna basarak D aktivitesinden geri tuşuna basmanız gerekir. Bunun yerine C'yi nasıl aktive edeceğimi bilmiyorum. Bu sorunu çözmeme yardımcı olan var mı?Yığın geçmişinden belirli etkinlikleri nasıl temizlerim?
cevap
Ben doğrudan programlı geçmişinden faaliyetlerini kaldırabilir emin değilim ama startActivityForResult()
yerine startActivity()
kullanırsanız, sonra faaliyetinden dönüş değerine bağlı olarak, daha sonra hemen finish()
öncel aktivite davranışını simüle etmek için İstediğiniz. Tüm aktivitelerinizde bu yöntemi kullanarak, etkinlik D olayından etkinlik A'ya gitmenize izin vermek için etkinlik yığınının basamaklandırılmasını sağlayabilirsiniz. Bu durumun sizin durumunuz olmadığını biliyorum, ancak daha önce biliyorsanız selefinin kalmasını istemediğiniz aktiviteyi başlatırsanız, startActivity()
'dan hemen sonra finish()
'u arayabilirsiniz.
Common Tasks and How to do Them in Android Ben @RivieraKid katılıyorum
"Yeni Ekran ömrü" olarak adlandırılan bölümüne bakın ama başka yol düşünemiyorum edin: Eğer gerçek bir özel bayrak set "Kaldır" düğmesine bastığınızda.
public void onBackPressed() {
if (!remove){
super.onBackPressed();
}else{
Intent goToA = new Intent((this,ActivityA.class););
goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goToA);
}
}
sen istediğin bu mu sence:
geri anahtar olay geçersiz kılar?
İyi şanslar.
Bence bu istediğini yapardı. Bildiri dosyasında, "B" ve "C" etkinliklerine "no" adlı "öznitelik" özniteliğini ekleyin ve geri düğmesini "D" ye geri getirerek yeniden ziyaret etmeyin.
<activity android:name="com.acme.activityA"></activity>
<activity android:name="com.acme.activityB"
android:noHistory="true"></activity>
<activity android:name="com.acme.activityC"
android:noHistory="true"></activity>
<activity android:name="com.acme.activityD"></activity>
RivieraKid iyi cevabı (ve serin bir giriş) vardır, ancak şeyiyle ben yeni başlatılan faaliyeti değil neden, aynı zamanda bir niyet içinde FLAG_ACTIVITY_NO_HISTORY bayrağı ayarlayabilirsiniz söz etmek istiyorum tarihte görünür. Bkz. http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY
Bir alternatif, etkinliklere erişim sahibi olmak ve bunları kapatmak için bir sınıf oluşturur. Örnek:
Etkinlikler:
- ger1
- ACT2
- Act3
Kontrol sınıfı: her bir faaliyetin onCreate yılında
public class ActivitiesControl {
public static act1 vAct1 = null;
public static act2 vAct2 = null;
public static act3 vAct3 = null;
}
ayarladığınız: ActivitiesControl.vAct1 = bu;
ve onDestroy(): ActivitiesControl.vAct1 = boş; Eğer stackHistory kaldırmak için bazı etkinlikler yok etmek istediğinizde
sadece çağrı:
ActivitiesContro.vAct1.finish();
Bunun en iyi yöntem olup olmadığını bilmiyorum, ama benim için işe yarayan şey. Uygulamayı başlattığınızda
rly kötü bir fikir bellek sızıntısı muhtemelen meydana gelecektir –
. Tüm aktiviteler varsayılan olarak aynı görevde başlatılır. Böylece arka yığıt aşağıdaki gibi görünüyor.
Görev: A-> B-> C-> arka yığının TOP Şimdi "D"
işaret ediyor bu durumda D zaman "A" tekrar TOP noktayı istiyorum . Sadece senin kadar zamanki gibi etkinlik başlatma etkinlik "D" "düğmesini kaldırmak" bastığınızda Hemen AndroidManifest.xml Şimdi
aktivite "A" için öznitelik
android:launchMode="singleTask"
beyan yap. arka yığın faaliyeti "B" ve "C" nin temizlenir ve Sen "A"
aramıyorsun bile bu bellekten adresinin etkinlik D kapatın ve yok edecek hatırla etkinliğinden temiz bir başlangıç olsun finish()
açıkça "D" içinde
- 1. Yığındaki tüm etkinlikleri nasıl temizlerim?
- 2. Belirli sütunları dplyr ile nasıl temizlerim?
- 3. Modeli nasıl düzgünce temizlerim?
- 4. Piton ile belirli bir sıradaki tüm görevleri python'da nasıl temizlerim?
- 5. lua durum kümemi nasıl temizlerim?
- 6. Belirli satırları log4j yığın izlemesinden nasıl filtrelerim?
- 7. Gezinme yığınını nasıl temizlerim?
- 8. Metin alanını nasıl temizlerim?
- 9. Terminal geçmişinden komutları arayın ve değiştirin
- 10. UML Sınıf Diyagramları içindeki etkinlikleri nasıl gösterirsiniz?
- 11. Android geliştirme becerilerimi nasıl temizlerim?
- 12. JQuery doğrulama hatalarını nasıl temizlerim
- 13. Bu JavaScript çerezini nasıl temizlerim?
- 14. PHP'nin Laravel'inde laravel.log'u nasıl temizlerim?
- 15. Tüm satırları bir TableLayout'dan nasıl temizlerim?
- 16. MVC ClientSide Doğrulama Etkinlikleri
- 17. Firebase özel etkinlikleri
- 18. Etkinlikleri ana sayfaya geçirme
- 19. Kabuktan bir APK içinden tüm etkinlikleri listele
- 20. Android onCreate ve onResume etkinlikleri
- 21. Boş bir alanı JFrame'de nasıl temizlerim?
- 22. Sınıf :: DBI'nin dahili önbelleğini nasıl temizlerim?
- 23. Javascript'teki bir div'in metin içeriğini nasıl temizlerim?
- 24. Mongodb kabuğundaki komut geçmişini nasıl temizlerim
- 25. AndroidPlot'taki grafikteki tüm alanları nasıl temizlerim?
- 26. Tarayıcı önbelleğini programlı olarak jsp'de nasıl temizlerim?
- 27. JavaScript kullanarak bir div içeriğini nasıl temizlerim?
- 28. Firebase bulut mesajı bildirimlerini nasıl temizlerim?
- 29. Yığın boyutunu izleyerek yığın taşması nasıl önlenir?
- 30. Yığın yeni yığın çerçevelerini itmeden nasıl taşar?
Geçerli etkinliğin yığında kalmaması için, bitirme çağrısının() hemen startActivity() öğesinden hemen sonra çağrılması çok yararlıdır. Teşekkürler. – dazed