android 从当前Activity完成堆栈中的任何前一个Activity?

e5nqia27  于 2023-05-05  发布在  Android
关注(0)|答案(4)|浏览(182)

如何完成应用程序堆栈中的任何先前活动(在任何级别,我的意思是不是直接的父级),从当前活动,比如我想使此先前活动无效的某些特定事件?有人帮忙吗?谢谢。

mo49yndu

mo49yndu1#

我知道这个答案可能有点晚了,但我还是要把它贴出来,以防有人在找这样的东西。
我在ACTIVITY_A中声明了一个静态处理程序

public static Handler h;

ACTIVITY_AonCreate()方法中,有

h = new Handler() {

        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch(msg.what) {

            case 0:
                ACTIVITY_A = null;
                finish();
                break;

            }
        }
        
    };

现在,从这个活动之后的任何活动,如ACTIVITY_BACTIVITY_C,我都可以调用

ACTIVITY_A.h.sendEmptyMessage(0);

然后调用finish()和ta-da!ACTIVITY_A是从另一个Activity完成的。

wgeznvg7

wgeznvg72#

所以我累了,但在我做了更深入的测试后没有工作(我把它留在这里以供将来参考):android:clearTaskOnLaunch
例如,假设某人从主屏幕启动Activity P,并从那里转到Activity Q。用户接下来按下Home,然后返回到活动P。通常,用户会看到活动Q,因为这是他们在P的任务中最后一次做的事情。然而,如果P将此标志设置为“true”,则当用户按下Home并且任务转到后台时,其顶部的所有活动(在本例中为Q)都将被移除。因此,当用户返回到任务时,只能看到P。
https://developer.android.com/guide/topics/manifest/activity-element.html

更新这确实有效

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
uujelgoq

uujelgoq3#

您可以使用Intent标志FLAG_ACTIVITY_CLEAR_TOP从堆栈中重新启动Activity并清除其上方的所有内容。这不是你想问的,但可能会有帮助。
为此,用途:

Intent intent = new Intent(context, classToBeStarted.class);
intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
yvt65v4c

yvt65v4c4#

这可以通过使用静态变量来实现。比如使用布尔变量activity_name_dirty = false;一旦出现使特定活动无效的条件,请将其标记为true。因此,在调用此Activity时,请随时检查activity_name_dirty的状态。然后,您可以使用“活动标志”创建新的即时,如Activity Fundamentals中所述

相关问题