如何关闭活动
How to close Activities
我有 4 个活动,每个活动都有不同的对象,可以从服务器获取。主要目的是当我在activity4提交最终数据时,Activity1必须再次调用。我已经测试了几种方法,从 D activity 回到 Main activity 很容易,但我也想清除所有以前的活动,这使得这个问题变得不同。
此时我必须关闭 activity B 和 C。如果我刚刚完成 activity D 并在新意图中启动 Activity A,则之前的 Activity 仍然存在并且每当我想从应用程序回来时,我都可以再次看到这些活动。如何同时关闭多个活动?
用于从 activity D 返回到 activity A 在 onBackPressed() 方法中传递意图。
@Override
public void onBackPressed() {
Intent in = new Intent(Activity-D.this,Activity-A.class);
startActivity(in);
finish();
}
使用标志 FLAG_ACTIVITY_CLEAR_TASK and FLAG_ACTIVITY_NEW_TASK 从 Activity D 开始 Activity A 以在创建新的 Activity.
时清除堆栈
你用过下面的标志吗
Intent.FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(CLASS_D.this, CLASS_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
使用 Intent Flags 清除堆栈,
Intent intent = new Intent(D.this,A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
然后 Activity A 只会在堆栈中
使用 FLAG_ACTIVITY_CLEAR_TOP Intent Flag 再次使用 -
启动 activity A
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这个标志将从堆栈中清除 B 和 C 并打开 A。
您可以使用 EventBus 来做到这一点。
定义事件class完成Activity
public class FinishActivity{
}
在activity B,C
注册事件
你可以使用
EventBus.getDefault().register(this)
在 onCreate 方法中注册和注销 onDestroy
通过 EventBus.getDefault().unregister(this)
。
在 activityB,C.
中创建一个方法
public void onMainThreadEvent(FinishActivity event) {
finish();
}
你可以通过EventBus.getDefault().post(new FinishAxtivity());
Activity发送FinishActivity事件,B,C在发送该事件后将自己完成。
2 行 Activity D 可以施展魔法。
在 Activity D
的 onBackPressed()
方法中。
添加论文行
@Override
public void onBackPressed() {
startActivity(new Intent(Activity_D.this,Activity_A.class));
finishAffinity();
}
FinishAffinity will clear all opened Activities. So only Activity A will remained open
一种可能的方法是使用 startActivityForResult 启动每个 activity,然后在 onActivityResult 回调中处理活动的关闭。
您可以通过不同的方式实现。
在 activity 声明中使用 noHistory
标志 manifests.xml
<activity
android:name=".Acitivity_B" <!-- do same with activity c and d -->
android:noHistory="true"/>
使用 startActivityForResult
startActivityForResult(intent,101);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 101)
finish();
}
解决方案: 您可以通过以下步骤关闭任何 activity 来自任何其他 activity 的任何 activity:(按照以下步骤)
Step1:在onCreate()
之前创建每个Class的静态对象:
public static YourActivityClass activity;
Step2: 然后在你的 onCreate()
初始化它:
activity = YourActivityClass.this
步骤 3: 现在你可以从 activity 你想要的任何一个开始:
YourActivityClass.activity.finish();
同样,您可以为每个 activity 关闭任何其他 activity。
替代方法:只是在意图中不传递任何历史记录:
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
使用该解决方案由您决定。祝一切顺利。
我有 4 个活动,每个活动都有不同的对象,可以从服务器获取。主要目的是当我在activity4提交最终数据时,Activity1必须再次调用。我已经测试了几种方法,从 D activity 回到 Main activity 很容易,但我也想清除所有以前的活动,这使得这个问题变得不同。
此时我必须关闭 activity B 和 C。如果我刚刚完成 activity D 并在新意图中启动 Activity A,则之前的 Activity 仍然存在并且每当我想从应用程序回来时,我都可以再次看到这些活动。如何同时关闭多个活动?
用于从 activity D 返回到 activity A 在 onBackPressed() 方法中传递意图。
@Override
public void onBackPressed() {
Intent in = new Intent(Activity-D.this,Activity-A.class);
startActivity(in);
finish();
}
使用标志 FLAG_ACTIVITY_CLEAR_TASK and FLAG_ACTIVITY_NEW_TASK 从 Activity D 开始 Activity A 以在创建新的 Activity.
时清除堆栈你用过下面的标志吗
Intent.FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(CLASS_D.this, CLASS_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
使用 Intent Flags 清除堆栈,
Intent intent = new Intent(D.this,A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
然后 Activity A 只会在堆栈中
使用 FLAG_ACTIVITY_CLEAR_TOP Intent Flag 再次使用 -
启动 activity AIntent intent = new Intent(ActivityD.this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这个标志将从堆栈中清除 B 和 C 并打开 A。
您可以使用 EventBus 来做到这一点。
定义事件class完成Activity
public class FinishActivity{
}
在activity B,C
注册事件你可以使用
EventBus.getDefault().register(this)
在 onCreate 方法中注册和注销 onDestroy
通过 EventBus.getDefault().unregister(this)
。
在 activityB,C.
public void onMainThreadEvent(FinishActivity event) {
finish();
}
你可以通过EventBus.getDefault().post(new FinishAxtivity());
Activity发送FinishActivity事件,B,C在发送该事件后将自己完成。
2 行 Activity D 可以施展魔法。
在 Activity D
的 onBackPressed()
方法中。
添加论文行
@Override
public void onBackPressed() {
startActivity(new Intent(Activity_D.this,Activity_A.class));
finishAffinity();
}
FinishAffinity will clear all opened Activities. So only Activity A will remained open
一种可能的方法是使用 startActivityForResult 启动每个 activity,然后在 onActivityResult 回调中处理活动的关闭。
您可以通过不同的方式实现。
在 activity 声明中使用
noHistory
标志manifests.xml
<activity android:name=".Acitivity_B" <!-- do same with activity c and d --> android:noHistory="true"/>
使用
startActivityForResult
startActivityForResult(intent,101); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 101) finish(); }
解决方案: 您可以通过以下步骤关闭任何 activity 来自任何其他 activity 的任何 activity:(按照以下步骤)
Step1:在onCreate()
之前创建每个Class的静态对象:
public static YourActivityClass activity;
Step2: 然后在你的 onCreate()
初始化它:
activity = YourActivityClass.this
步骤 3: 现在你可以从 activity 你想要的任何一个开始:
YourActivityClass.activity.finish();
同样,您可以为每个 activity 关闭任何其他 activity。
替代方法:只是在意图中不传递任何历史记录:
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
使用该解决方案由您决定。祝一切顺利。