从带有 Flag 的任何活动返回到 MainActivity
Go back to MainActivity from any activities with Flag
我想从所有活动中返回主界面Activity。
例如,我的一堆活动:
A - B - C - D.
A (MainActivity) 在栈底,D 在栈顶 .
当我使用 android:launchMode="singleTask"
时。如我所料,我可以在任何活动中回到 A。
但是当我使用 flag FLAG_ACTIVITY_NEW_TASK
(没有 launchMode="singleTask")时,它没有按预期工作,它打开了一个新的 Activity.
堆栈是:
A - B - C - D - A
不像文档写的那样:
FLAG_ACTIVITY_NEW_TASK
Start the activity in a new task. If a task is
already running for the activity you are now starting, that task is
brought to the foreground with its last state restored and the
activity receives the new intent in onNewIntent().
This produces the same behavior as the "singleTask" launchMode value, discussed in the
previous section.
有人知道原因吗?谢谢
在 one.You 中试试这个可以像这样在堆栈中添加和删除 activity。
// Add activity
public static void addActivities(String actName, Activity _activity) {
if (Config.screenStack == null)
Config.screenStack = new HashMap<String, Activity>();
if (_activity != null)
Config.screenStack.put(actName, _activity);
}
// Remove Activity
public static void removeActivity(String key) {
if (Config.screenStack != null && Config.screenStack.size() > 0) {
Activity _activity = Config.screenStack.get(key);
if (_activity != null) {
_activity.finish();
}
}
}
用户在 setContentView 之前添加活动以添加到堆栈中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addActivities("DemoActivity", DemoActivity.this)
setContentView(R.layout.activity_create_feed_post);
}
要删除 activity,您只需调用 removeActivity() 并传递添加 activity 时使用的密钥。
覆盖每个 activity 的 onBackpress
方法:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
希望此解决方案能解决您的问题::- 仅将其设置为 Intent
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
找到解决方案:
注意:它将清除所有以前的 activity 并启动 HomeActivity
Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(homeActivity);
你应该使用下面的代码跳转到 MainActivity.With intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
下面的意图标志它清除所有以前的 activity.
Intent intent = new Intent(this, DashboardActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
注意一件事,您使用了 android:launchMode="singleTask"
因此,从 A activity 移动到另一个 activity 时,您必须完成 A Activity 通过使用 this.finish()
方法。
我想从所有活动中返回主界面Activity。 例如,我的一堆活动: A - B - C - D. A (MainActivity) 在栈底,D 在栈顶 .
当我使用 android:launchMode="singleTask"
时。如我所料,我可以在任何活动中回到 A。
但是当我使用 flag FLAG_ACTIVITY_NEW_TASK
(没有 launchMode="singleTask")时,它没有按预期工作,它打开了一个新的 Activity.
堆栈是:
A - B - C - D - A
不像文档写的那样:
FLAG_ACTIVITY_NEW_TASK
Start the activity in a new task. If a task is already running for the activity you are now starting, that task is brought to the foreground with its last state restored and the activity receives the new intent in onNewIntent().This produces the same behavior as the "singleTask" launchMode value, discussed in the previous section.
有人知道原因吗?谢谢
在 one.You 中试试这个可以像这样在堆栈中添加和删除 activity。
// Add activity
public static void addActivities(String actName, Activity _activity) {
if (Config.screenStack == null)
Config.screenStack = new HashMap<String, Activity>();
if (_activity != null)
Config.screenStack.put(actName, _activity);
}
// Remove Activity
public static void removeActivity(String key) {
if (Config.screenStack != null && Config.screenStack.size() > 0) {
Activity _activity = Config.screenStack.get(key);
if (_activity != null) {
_activity.finish();
}
}
}
用户在 setContentView 之前添加活动以添加到堆栈中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addActivities("DemoActivity", DemoActivity.this)
setContentView(R.layout.activity_create_feed_post);
}
要删除 activity,您只需调用 removeActivity() 并传递添加 activity 时使用的密钥。
覆盖每个 activity 的 onBackpress
方法:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
希望此解决方案能解决您的问题::- 仅将其设置为 Intent
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
找到解决方案:
注意:它将清除所有以前的 activity 并启动 HomeActivity
Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(homeActivity);
你应该使用下面的代码跳转到 MainActivity.With intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
下面的意图标志它清除所有以前的 activity.
Intent intent = new Intent(this, DashboardActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
注意一件事,您使用了 android:launchMode="singleTask"
因此,从 A activity 移动到另一个 activity 时,您必须完成 A Activity 通过使用 this.finish()
方法。