2 aktivitem var: Ana ve Liste.
Main'den Listeyi açabilirsiniz; Listeden Main'i açabilirsiniz.
Ben Listesinin her açılış böylece seveceğini değil 'tarih' haline kaydedilmiş olsun. Yani, Main basarak geri edemez Listesine geri dönün.
Mümkün mü?
2 aktivitem var: Ana ve Liste.
Main'den Listeyi açabilirsiniz; Listeden Main'i açabilirsiniz.
Ben Listesinin her açılış böylece seveceğini değil 'tarih' haline kaydedilmiş olsun. Yani, Main basarak geri edemez Listesine geri dönün.
Mümkün mü?
Yanıtlar:
Listenizi başlatırken Activity
, Intent
bayraklarını şu şekilde ayarlayın:
Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);
FLAG_ACTIVITY_NO_HISTORY
Bayrak yeni tutar Activity
tarih yığınına eklenmesini.
NB: @Sam'ın işaret ettiği gibi, i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
bunun yerine kullanabilirsiniz . İşlevsel bir fark yoktur.
Intent
"Sadece başlangıç noktasına dönülmezse tarihe eklenir" şeklinde bir bayrak yoktur Activity
.
Manifest dosyasında şunu ekleyin:
android:noHistory="true"
yığında tutmak istemediğiniz aktiviteye.
Yeni görevi temizleyerek kullanın. Bu, diğer seçenekler olmadığında benim durumumda çalıştı.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Tüm geçmiş yığınını temizleyin ve Android'de yeni bir etkinlik başlatın
Görünüşe göre, başka bir etkinliğinizde bir başkasını açtıktan hemen sonra bitir () çağırırsanız, biten yığın yığından kaldırılır.
Örneğin:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
Benim özel durumumda FLAG_ACTIVITY_NO_HISTORY
işe yaramadı. Ne yaptım FLAG_ACTIVITY_NEW_TASK
ya FLAG_ACTIVITY_CLEAR_TASK
yalnız kendileri çalışması ile.
Ancak FLAG_ACTIVITY_NEW_TASK
ve FLAG_ACTIVITY_CLEAR_TASK
birlikte çalıştı.
Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Geç cevap, ancak diğer cevaplara biraz derinlik katıyor. Her şey, o aktiviteden başlatılan diğer aktivitelerle ne olmasını istediğinize bağlıdır.
Seçenek 1 - Yalnızca bu tek etkinlikte arama etkinliği geçmişi olmamalıdır
O zaman yap:
Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
Seçenek 2 - Bu belirli faaliyetten başlatılan tüm faaliyetlerin geçmişi olmamalıdır
Ardından arama faaliyetinin manifestini ekleyin:
android:noHistory="true"
Ancak yeni aktivitede geçmişe sahip olmak istiyorsanız, bayrağı manuel olarak kaldırmanız gerekir:
Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
Umarım bu diğer cevapları temizler :)
Kotlin'de bunu yapmanın bir yolunu eklemek istedim:
val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) }.also { startActivity(it) }
bayrak eklemek FLAG_ACTIVITY_NEW_TASK
için sizinIntent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
'Dönüş' işlevini durdurmak için belirli bir etkinlikteki geri düğmesini geçersiz kılamaz mısınız?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
Activity
iyi bir uygulama değildir.
OnBackPressed
için var.
finish()
hemen sonra aramasını sağlayınstartActivity(...)
. Bu şekilde, kullanıcı 'ana' dan GERİ düğmesine basarsa, geri dönecek hiçbir şey olmayacaktır.