2012-02-05 20 views
5

İki etkinliğim (activity1 ve activiy2) yaşıyorum ve her etkinliğin her birinde bir düğme bulunuyor. Aktivitede1 birkaç seçenek ile bir spinner sahip. Bu çeviriciden 2. seçeneği seçtiğimi ve ben de etkinlik1'deki düğmeyi tıklattığımı varsayalım, sonra da aktivite2 başladığını varsayalım. Geri düğmesini tıklattığımda, etkinlik1 sürdürülür ve aynı seçenek 2 görünür (ihtiyacım olduğu gibi). Sorun şu ki, benim aktivitem2 başlatılmışsa ve bir düğmeyi tıklatırsam, etkinlik1 başlatılır. Ancak, önceki faaliyet durumuna geri dönmek yerine, yeni oluşturduğu ve önceki seçimin değiştiği bir şekilde başlar. Aktiviteye yeniden başladığımda bile, geri düğmesi (önceki faaliyete geri dönme özelliği, herhangi bir etkinliğin önceki halini otomatik olarak sürdürme anlamına gelmez) gibi aynı özelliği nasıl alabilirim? Tekrar ziyaret edildiyse, bir faaliyetin önceki durumunu nasıl sürdüreceğimi bilmem gerekiyor.Bir etkinliğin önceki durumu nasıl korunur

Bu düğme tıklandığında başka bir faaliyetten gitmek bu kodla geçerli:

Intent intent=new Intent(); 
intent.setClassName(getApplicationContext(),"com.myapp.activityname"); 

startActivity(intent); 

Lütfen herhangi bir cevap verip vermediğini açıklamak nedenle lütfen me.I, android içinde bir acemi yardımcı biraz. Teşekkürler adavnce

+0

Bunun için belgeler şu adreste bulunmaktadır: http://developer.android.com/reference/android/app/Activity.html –

cevap

9

Cevabı buldum. Basit kelimelerle neler yaptığımı söyleyeyim,

İki etkinlik aktivitesi1 ve etkinlik2 olduğumu varsayalım ve ben etkinlik1'den etkinlik2'ye geçiyorum (etkinlik2'de bazı işler yaptım) ve tekrar tıklayarak etkinlik 1'e geri dönüyorum etkinlik1'de bir düğme. Şimdi bu aşamada etkinlik2'ye geri dönmek istedim ve aktivitemi2 son soldaki etkinlik2 ile aynı durumda görmek istiyorum.

<activity android:name=".activity2" 
      android:alwaysRetainTaskState="true" 
      android:launchMode="singleInstance"> 
</activity> 

Ve düğme tıklama olayı activity1 içinde

ben böyle yaptım:

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.setClassName(this,"com.mainscreen.activity2"); 
startActivity(intent); 
i yaptıklarını yukarıdaki senaryo için

Manifest'inizde ben böyle bazı değişiklikler yapılmış olmasıdır

Ve düğme tıklama olayı activity2 i böyle yapmış: Artık

Intent intent=new Intent(); 
intent.setClassName(this,"com.mainscreen.activity1"); 
startActivity(intent); 

neyi wil Ben, etkinlik2'de yaptığımız değişiklikler her ne olursa olsun, kaybolmayacak ve etkinlik2'yi daha önce bıraktığımız gibi aynı durumdan görebiliriz.

Bunun bir cevap olduğuna inanıyorum ve bu benim için iyi çalışıyor.

+0

Lütfen bu cevabı tekrar tekrar yayınlamayı bırakın. Yinelenen sorular bulursanız, bunları işaretleyin. – Mat

3

Bir Etkinlik'in onSaveInstanceState olay işleyicisini geçersiz kılarak, örnek değerlerini kaydetmek için Bundle parametresini kullanabilirsiniz. Uygulama bir oturum sırasında yeniden başlatmaya mecbur olmadığını kaydetti Paketi onRestoreInstanceState ve onCreate yöntemlerle geçirilir

@Override 
public void onSaveInstanceState(Bundle outState) { 
    // Retrieve the View 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    // Save its state 
    outState.putString("My text", 
    myTextView.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

: İşte bir örnek. Daha sonra, Bundle'dan değerler ayıklayabilir ve bunları Etkinlik örneği durumunu güncellemek için kullanabilirsiniz. İşte bir örnek:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    String text = “”;  
    if (icicle != null && icicle.containsKey("My text")) { 
     text = icicle.getString(TEXTVIEW_STATE_KEY); 
    } 
    myTextView.setText(text); 
} 

Bir Etkinlik inaktif hale gelir sadece onSaveInstanceState denir, ancak finish veya Geri düğmesine basarak kullanıcı tarafından bir çağrıyla kapatılıyor değilken unutmamak önemlidir.

+0

Biraz açıklama lütfen –

+0

güncellenmiş yanıt bakın. –

+0

Bu önceki faaliyetin tüm durumu hakkında ne. Yani bu aktivite arkada, yani onu geri getirmenin bir yolu var. Yani bu aktivitede birçok iş parçacığı çalışıyorsa, en iyi seçeneğin onu öne getirmek olduğuna inanıyorum. –

0

İndir source code veya aktivite biri için the entire post

görüyorsun, etkinlik biridir ebeveyn etkinliğe değerleri döndürür startActivityForResult() fonksiyonunu kullanmak gerekir.

Intent intent = new Intent(MainActivity.this, Activity2.class); 
    startActivityForResult(intent, 1); 

Ve

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == 1) { 
       if(resultCode == RESULT_OK){ 
        String text=data.getStringExtra("text"); 
        vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text); 
       } 
      } 
     } 

Etkinlik 2

aktivite biri dönmek için aşağıdaki kodu ekleyin ve bazı geçiş eklemek faaliyet biri değiştirilmeden aşağıdaki kodu faaliyeti iki değerleri almak değerler

  Intent intent=new Intent(Activity2.this, MainActivity.class); 

      Bundle extra=new Bundle(); 

      extra.putString("text", eTxt.getText().toString()); 
      intent.putExtras(extra); 
      setResult(RESULT_OK, intent); 
      finish(); 

Sonunda bitti

İlgili konular