Android: open activity without save into the stack

白昼怎懂夜的黑 提交于 2019-11-26 08:14:01

问题


I have 2 activities: Main and List.

From Main you can open List; from List you can open Main.

I\'d like it so that every opening of List does not get saved into the \'history\'. So, pressing back from Main cannot return to List.

Is it possible?


回答1:


When starting your list's Activity, set its Intent flags like so:

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.

NB: As @Sam points out, you can use i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); instead. There is no functional difference.




回答2:


In the manifest file add:

android:noHistory="true" 

to the activity that you don't want to keep on the stack.




回答3:


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




回答4:


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();



回答5:


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.

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);



回答6:


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))



回答7:


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);



回答8:


add the flag FLAG_ACTIVITY_NEW_TASK to your Intent

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK




回答9:


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:

android:noHistory="true" 

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 :)




回答10:


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);
}


来源:https://stackoverflow.com/questions/12358485/android-open-activity-without-save-into-the-stack

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!