我有4个活动,每个活动都有可以从服务器获取的不同对象。主要目的是当我在活动4中提交最终数据时,必须再次调用活动1。我已经测试了几种方法,从D活动回到Main活动很容易,但是我也想清除所有以前的Activity,这使这个问题有所不同。
这一次,我必须关闭活动B和C。如果我刚刚完成活动D并以新的意图启动活动A,则先前的活动仍然有效,只要我想从应用程序回来,我都可以再次看到这些活动。如何同时关闭多个活动?
答案 0 :(得分:1)
在创建新的活动时,使用标志FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK从活动D开始活动A,以清除堆栈。
答案 1 :(得分:1)
您使用了以下标志
Intent.FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(CLASS_D.this, CLASS_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
答案 2 :(得分:1)
使用意图标志清除堆栈,
Intent intent = new Intent(D.this,A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
然后,活动A仅位于堆栈中
答案 3 :(得分:1)
使用FLAG_ACTIVITY_CLEAR_TOP Intent标志再次使用-开始活动A。
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
此标志将从堆栈中清除B和C并打开A。
答案 4 :(得分:1)
活动D上的2行可以发挥作用。
在您的onBackPressed()
的{{1}}方法中。
添加这些行
Activity D
FinishAffinity 将清除所有打开的活动。因此只有活动A保持打开状态
答案 5 :(得分:1)
解决方案:您可以通过执行以下操作来关闭任何其他活动:(请按照以下步骤操作)
步骤1:在onCreate()
之前创建每个类的静态对象:
public static YourActivityClass activity;
第二步:,然后在您的onCreate()
中对其进行初始化:
activity = YourActivityClass.this
第3步:现在,您可以从任何活动中完成它:
YourActivityClass.activity.finish();
类似地,您可以针对要关闭的任何其他活动执行此操作。
备用方法:仅在意图中不传递任何历史记录:
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
使用解决方案的选择取决于您。一切顺利。
答案 6 :(得分:0)
用于从活动D返回活动A的意图是通过onBackPressed()方法传递。
@Override
public void onBackPressed() {
Intent in = new Intent(Activity-D.this,Activity-A.class);
startActivity(in);
finish();
}
答案 7 :(得分:0)
您可以使用EventBus来做到这一点。
定义事件类FinishActivity
public class FinishActivity{
}
在活动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());
发送FinishActivity事件,活动B,C将在发送该事件后自行完成。
答案 8 :(得分:0)
一种可行的方法是使用startActivityForResult启动每个活动,然后在onActivityResult回调中处理活动的关闭。
答案 9 :(得分:0)
您可以通过不同的方式实现这一目标。
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();
}