我有两个活动: 主要和列表。
从 Main 可以打开 List; 从 List 可以打开 Main。
我希望这样,每一个开放的名单是 没有保存到’历史’。因此,按回从主 不能返回到列表。
有可能吗?
Can you not override the back button on the particular activity to stop the 'return' functionality?
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDown(keyCode, event); }
When starting your list's Activity, set its Intent flags like so:
Activity
Intent
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);
The FLAG_ACTIVITY_NO_HISTORY flag keeps the new Activity from being added to the history stack.
FLAG_ACTIVITY_NO_HISTORY
NB: As @Sam points out, you can use i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); instead. There is no functional difference.
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
add the flag FLAG_ACTIVITY_NEW_TASK to your Intent
FLAG_ACTIVITY_NEW_TASK
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
In the manifest file add:
android:noHistory="true"
to the activity that you don't want to keep on the stack.
It seems, if you call finish() on your activity right after you have opened another, the one that is finished is removed from the stack.
for example:
Intent intent = new Intent(this, NextActivity.class); startActivity(intent); finish();
Use the new task with clearing. This worked in my case when the other options didnt.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Clear the entire history stack and start a new activity on Android
In my particular case FLAG_ACTIVITY_NO_HISTORY did not work. Neither did FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK alone by themselves work.
FLAG_ACTIVITY_CLEAR_TASK
However FLAG_ACTIVITY_NEW_TASK and FLAG_ACTIVITY_CLEAR_TASK together did work.
Intent intent = new Intent(FooActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
Just wanted to add a way to do this in Kotlin:
val i = Intent(this, LogInActivity::class.java) startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Late answer, but adds some depth to other answers. It all comes down to what do you want to happen with other activities started from that activity
Option 1 - Just this one activity should not have history of calling activity
Then just do:
Intent i = new Intent(...); i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(i);
Option 2 - All activities started from that specific activity should not have history
Then add in manifest of the calling activity:
But if you do want to have history in new activity, then you have to manually remove the flag:
Intent i = new Intent(...); i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(i);
Hope that clears up other answers :)
Try FLAG_ACTIVITY_CLEAR_TOP if the activity is already running:
Intent intent = new Intent(this, MyActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
case : 1
use this flag
in this case activity transition no smoothly working blank white page before going startactvity
cas 2 :
If your phone is no so fast you'll see as previous activity is moving off , I hope to days most off the device will take care of this