2013-10-07 6 views
10

Bu yüzden bir Aktivite A ve bir Activity B var. Bir düğmeye basarak Activity B'ye gidebilmek için Activity A'yı istiyorum. Bu işe yarar, ancak yukarı (A) eylemine geri dönmek için yukarı gezinmeyi (eylem çubuğundaki ana düğme) kullandığımda, onCreate() yeniden çağrılır ve kullanıcının yazdığı eski bilgiler kaybolur. onCreate always called if navigating back with intent, ancak fragmanlar kullanılır ve ben parçaları kullanacak şekilde tüm app yeniden tasarlamak zorunda değil umuyorum:onCreate up navigation içinde Aktivite A'da aranıyor

gördüm. Aktivite A'nın her seferinde tekrar aktif hale gelmesi için onCreate() öğesini durdurabilmemin bir yolu var mı?

+0

ana etkinliğiniz için android:launchMode="singleTop" özniteliğini ayarlayabilirsiniz. ActivityC'den ActivityA'ya 'onCreate()' çağrılmadan dönebilmelidir. Korkak bir şey yapmalısın. Lütfen bunu yapmak için kullandığınız kodu gönderin. Ayrıca, ActivityB çalışırken ActivityA'nın henüz bitmediğinden emin misiniz? –

cevap

12

Bu davranış gayet güzel ve aranıyor. Sistem, bazı belleği boşaltmak için arka planda bulunan Activities'u durdurmaya karar verebilir. Aynı şey, örn. cihazı döndürmek.

Normalde bir demete (girilen metin ve malzeme gibi) örnek durumunu kaydetmek ve Activity yeniden edildiğinde Gruptan bu değerleri getir. Eğer olmadan ebeveyne çocuktan yönlendirilmek istiyorsanız

private EditText mSomeUserInput; 
private int mSomeExampleField; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // TODO inflate layout and stuff 
    mSomeUserInput = (EditText) findViewById(R.id.some_view_id); 

    if (savedInstanceState == null) { 
     // TODO instanciate default values 
     mSomeExampleField = 42; 
    } else { 
     // TODO read instance state from savedInstanceState 
     // and set values to views and private fields 
     mSomeUserInput.setText(savedInstanceState.getString("mSomeUserInput")); 
     mSomeExampleField = savedInstanceState.getInt("mSomeExampleField"); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // TODO save your instance to outState 
    outState.putString("mSomeUserInput", mSomeUserInput.getText().toString()); 
    outState.putInt("mSomeExampleField", mSomeExampleField); 
} 
+1

Bu gerçekten iyi bir çözüm! Paketlerin ne için olduğu hakkında hiçbir fikrim yoktu, ancak kullanıcının bilgilerini saklamak için bunları kullanmanın bir yolunu bulacağım. Çok teşekkürler! –

+0

Çok meraklı. Android için geliştirdiğim 3 yıl Ben bu basit Android davranışına sahip olmadım. Bunun nedeni, bazen niyetle oynamak zor olabilir :-) – cesards

+2

YUKARI Gezinme'yi kullanarak B'den gelen Etkinlik A'ya dönerek onCreate'u yürütmeyi atlamanın bir yolu var mı? Ben aslında veri almak için ağ çağrıları yapıyorum ve tekrar yürütmek daha fazla zaman alır. –

12

Sen onSupportNavigateUp()

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 
+0

Android'in yukarı ve geri düğmesinin bir sebebi var. Alıntı: http://developer.android.com/training/implementing-navigation/temporal.html "Geri navigasyon, kullanıcıların daha önce ziyaret ettikleri ekranların geçmişi boyunca nasıl geri gittikleridir. Tüm Android cihazlar bu tür bir Geri düğmesi sağlar. navigasyon, ** böylece uygulamanız UI'ye Geri düğmesi eklememelidir. ** " –

0

geçersiz kılarak yukarı düğmesi, geri basmak gibi davranır yapabilirsiniz: Burada

kullandığım bazı standart koddur Ebeveynin yeniden yaratılması (onCreate yöntemini çağırmak), AndroidManifest.xml