从堆栈历史记录中清除特定活动

时间:2018-11-22 12:29:37

标签: android

假设我有一个名为A,B,C,D的活动。现在,考虑将A作为根活动启动,将B从A启动,将C从B启动,将D从C启动。 现在,我在活动D中有一个名为“成功”的按钮。如果想在活动D中按“成功”按钮,则应从历史记录堆栈中删除活动C并转到活动B,但在按下时活动D中的键应显示活动C而不是活动B,并从堆栈中清除D。请有人能帮助我解决此问题吗?

2 个答案:

答案 0 :(得分:0)

将此代码添加到您的Activity_D中,单击Button

    btnSuccess.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(Activity_D.this, Activity_B.class));
            finishAffinity();
        }
    });

还将此内容添加到您的Activity_D中到按下了向后处理按钮

@Override
public void onBackPressed() {
    finish();
    super.onBackPressed();
}

从Activity_C到Activity_D

startActivity(new Intent(Activity_C.this, Activity_D.class));

请勿在此处致电finish()

答案 1 :(得分:0)

单击“成功”按钮时,可以使用以下代码行打开B活动:

Intent d_intent = new Intent(D.this, B.class);
d_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
d_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(d_intent);
finish();

由于Intent.FLAG_ACTIVITY_CLEAR_TOP,此处活动B将从后堆栈开始,而不是从新实例开始,并且Intent.FLAG_ACTIVITY_NEW_TASK将清除堆栈并使其成为顶层。因此,当我们按下“后退”按钮时,整个应用程序将被终止。然后在上按时,您只需拨打

finish();

希望它会对您有所帮助。