2011-09-29 17 views
20

Bir şey merak ediyorum. Mevcut etkinliğimi nasıl bitirebilirim ve başka bir tane başlatabilirim.Android bitirmek Etkinlik ve başka bir tane başlatmak

Örnek: başarılı bir senkronizasyon işleminden sonra ve eğer SyncActivity başlar MainActivity ben veya başka bir aktivite SynActivity önce açılmış SyncActivity dönmeme düğmeye tekrar bastığınızda

MainActivity 
    --(starts)--> LoginActivity 
     --(if success, starts)--> SyncActivity 
      --(if success start)--> MainActivity (with updated data). 

yüzden istiyorum.

Intent intent = new Intent(Synchronization.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent); 
this.finish(); 

ancak düzgün çalışmıyor:

Bu kod ile denedim. İşlerin düzgün bir şekilde nasıl işleneceği hakkında bir fikrin var mı?

+0

"aynı zamanda" ne anlama geliyor? – Blackbelt

+0

Sadece –

cevap

45

senin OP bakılırsa Kullanım

Intent intent = new Intent(SyncActivity.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
+17

Ohh güçlü bayraklarını, yani çok keşfedilmemiş ... (- – Audrius

+2

"Açık" olarak adlandırılmadığınızda, "bitir"(); '' onDestroy() 'yaşam döngüsü yönteminin çağrılmayacağını unutmayın. startActivity (niyet); '. – heyarne

3

, ben .. kesinlikle iki kez MainActivity başlatması gerektiği emin değilim

bir uygulama gerçekten kullanıcı tarafından kapatıldı asla böylece Android tasarlanmıştır

. UI verileri kaydetmek için böyle OnResume ve OnPause olarak android yaşam döngüsü yöntemleri geçersiz kılma üzerine Konsantre vb Dolayısıyla

, sen gerekmez açıkça finish() ana faaliyeti (ve gerçekten olmamalı) için. Önceki etkinliklerden giriş veya senkronizasyon verilerini almak için OnActivityResult() yöntemini geçersiz kılmanız yeterlidir. Ancak, bunu yapmak için startActivityForResult(intent) kullanarak aktiviteyi başlatmalısınız. Yani her etkinlik için bunu yapmanız gerekir:

Ana faaliyet:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case LOGIN_RETURN_CODE: 
     //do something with bundle attached 
    } 
} 

Giriş etkinliğini:

Intent intent = new Intent(MainActivity.this, LogInActivity.class); 
startActivityForResult(intent, LOGIN_RETURN_CODE); 

bilgi giriş alma için:

static public int LOGIN_RETURN_CODE = 1; 

giriş başlatmak için

Intent intent = new Intent(LogInActivity.this, SyncActivity.class); 
startActivityForResult(intent,SYNC_RETURN_CODE); 

bilgi alma ve Main dönmek için: senkronizasyonu başlatmak için

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case MainActivity.SYNC_RETURN_CODE: 
      Intent intent = new Intent(...); 
      intent.setResult(RESULT_OK); 
      finish(); 
     } 
    } 

Bu, tüm derlemek olmayabilir, ama umarım fikir.

İlgili konular