2011-05-16 14 views
5

Ana etkinlik etrafında çevreleyen bir uygulama (ana menü) var. Her bir uygulamada, bu etkinliğe yönlendiren bir seçenek menüsü vardır.Android: launchMode = TekTask sorunu

İlk önce, bu öğe seçildiğinde her zaman yeni bir ana etkinliğe başladım. Niyet paketini kullanarak, ana aktiviteyi yeni bir başlangıçta yaptığım bazı başlatmaların gerekli olmadığını söyledim. Bununla birlikte, genel davranışı pek beğenmedim. Ben android:launchMode="SingleTask"'a tökezledim ve bu yardımcı görünüyordu: şimdi her zaman ana menü etkinliğimi yeniden yaratmıyorum; Ayrıca, "geri" düğmesine basarsam doğrudan ana ekrana geri dönüyorum. Bu oldukça uygun bir "ana" menü gibi hissediyor.

Sorunum şimdi şudur: Uygulamamın başka bir etkinliğini çalıştırırsam, ana ekran düğmesine basıp uygulamamı yeniden açar (örneğin "son uygulamalar"), sonra son etkinliğe geri dönmem ancak Ana olanı. Diğer aktivite yok edilir.

SingleTask davranışını, yalnızca bir etkinliğe dönmeden nasıl uygulayabilirim?

+0

Sorununuz için bir düzeltme bulduğunuza sevindim. Gelecek okuyucular için, buradaki kök sebebinin kabul edilen yanıtın durumuyla ilgili olmadığını düşünüyorum, ama aslında burada açıklanan "böcek": http://stackoverflow.com/questions/2417468/android-bug-in-launchmode-singletask -activity-stack-not-korunmamış – eselk

cevap

3

Etkinlik Yaşam döngüsü bkz sonra (donanım ev düğmesini kullanarak) bıraktığınız aynı aktiviteye götürmeliyiz uygulamanıza geri gidiş Bununla birlikte, Android sisteminin sistem kaynaklarını gerektirdiğinde uygulamaları öldürdüğünü unutmayın. Yani diğer uygulamaya gittiğinizde uygulamanız öldürülmüş olabilir. Ardından, uygulamanıza geri döndüğünüzde, varsayılan başlatıcı etkinliği yeniden başlatılır. Bu, Menü etkinliğinizdir.

geri herhangi bir faaliyet ana etkinliğe ulaşmak için şunu yapın: aktivite yığınını temizlemek ve geri ana etkinliğe alırsınız

public static void goHome(Context context) { 
     final Intent intent = new Intent(context, HomeActivity.class); //give name of your main activity class here 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     context.startActivity(intent); 
    } 

. SingleTop ilan ettiğiniz gibi, mevcut ana etkinliği ön plana getirecektir. Intent.FLAG_ACTIVITY_CLEAR_TOP bayrağı, ana etkinlikteki yığındaki tüm etkinlikleri kaldırır. (Aynı uygulama içinde olduğunuzu farz ediyorum).

Şimdi, bütün diğer aktiviteleri sadece düğmeye donanım geri basarsanız, bu uygulamadan çıkın gerektiğini kimin tıklama dinleyici ana etkinlikten yöntemi goHome();

çağıran bir düğme eklemek gerekir.

+1

Aslında normal davranışa sahip olmak isterim. Ancak, ana faaliyetimi tek görev olarak bildirirsem, ana düğüme bastığımda diğer etkinlikler de yok olur. Elde etmek istediğim şey, a) ana uygulamadan ana aktiviteye hızlı bir bağlantı, ana uygulamayı yeniden oluşturmadan ve b) ana uygulamadaki geri düğmesine basarak tüm uygulamayı "kapatarak". (Ana düğme ile aynı etkiyi ifade etmek anlamına gelir.) Bununla birlikte, b) sahip olmak güzel bir şeydir, bu yüzden esas olarak a) elde etmek isterim. :-) – jellyfish

+0

Şimdi ne demek istediğini anlıyorum. Yukarıda düzenlenmiş cevabımı görün. Donanım geri düğmesi veya bir yazılım hakkında konuşup konuşmayacağınızı daima belirtin. – codinguser

+0

Çok teşekkür ederim! Tam olarak aradığım şey buydu. Gelecekte tavsiyenizi de hatırlayacağım. :-) – jellyfish

0

Neden ana etkinlik tarafından oluşturulan etkinliklerde bitirmeyi() çağırmıyorsunuz? Bu şekilde, yeni bir tane oluşturmadan ana etkinliğe dönersiniz ...

+0

kulağa hoş geliyor, ama bazen benim gerçek aktivitem ile ana aktivitem arasında birden fazla etkinliğim var. Aradaki her şeyi kapatabileceğim bir yol var mı? – jellyfish

+0

Daha iyi bir çözüm olabilir, ancak onActivityResult çağrıldığında finish() öğesini çağırarak etkinlikleri kapatabilirsiniz."KAPAT" gibi en üstteki etkinlikte bir sonuç bayrağı ayarlayacaksınız ve temel faaliyetler kapanışı ele alacaktı. Bu böyle giderdi, A C oluşturur B oluşturur. Şimdi C aramalar "CLOSE" sonucu ile bitirir, B onActivityResult içinde sonuç kodunu alır ve bitirmekle kendisini kapatır .... –

+0

Anlıyorum, teşekkür ederim. Bunu deneyeceğim. :-) – jellyfish

0

Başka bir etkinliğe başlamadan önce etkinliğinizin durumunu kaydetmeli ve ardından son etkinliğinize geri döndüğünüzde etkinliğinize devam etmelisiniz. diğer faaliyetler Android'de etkinlik varsayılanlarla normalde ilan Eğer Android den http://developer.android.com/guide/topics/fundamentals/activities.html

+0

Bunu memnuniyetle yaparım, ancak tüm etkinlik yığınına geri dönmeden ana faaliyetimi nasıl sürdüreceğimi bilmiyorum. – jellyfish