如何完成应用程序堆栈中的任何先前活动(在任何级别,我的意思是不是直接的父级),从当前活动,比如我想使此先前活动无效的某些特定事件?有人帮忙吗?谢谢。
mo49yndu1#
我知道这个答案可能有点晚了,但我还是要把它贴出来,以防有人在找这样的东西。我在ACTIVITY_A中声明了一个静态处理程序
ACTIVITY_A
public static Handler h;
在ACTIVITY_A的onCreate()方法中,有
onCreate()
h = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { case 0: ACTIVITY_A = null; finish(); break; } } };
现在,从这个活动之后的任何活动,如ACTIVITY_B或ACTIVITY_C,我都可以调用
ACTIVITY_B
ACTIVITY_C
ACTIVITY_A.h.sendEmptyMessage(0);
然后调用finish()和ta-da!ACTIVITY_A是从另一个Activity完成的。
finish()
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
android:clearTaskOnLaunch
更新这确实有效
Intent intent = new Intent(this, MyActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(intent);
uujelgoq3#
您可以使用Intent标志FLAG_ACTIVITY_CLEAR_TOP从堆栈中重新启动Activity并清除其上方的所有内容。这不是你想问的,但可能会有帮助。为此,用途:
FLAG_ACTIVITY_CLEAR_TOP
Intent intent = new Intent(context, classToBeStarted.class); intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
yvt65v4c4#
这可以通过使用静态变量来实现。比如使用布尔变量activity_name_dirty = false;一旦出现使特定活动无效的条件,请将其标记为true。因此,在调用此Activity时,请随时检查activity_name_dirty的状态。然后,您可以使用“活动标志”创建新的即时,如Activity Fundamentals中所述
4条答案
按热度按时间mo49yndu1#
我知道这个答案可能有点晚了,但我还是要把它贴出来,以防有人在找这样的东西。
我在
ACTIVITY_A
中声明了一个静态处理程序在
ACTIVITY_A
的onCreate()
方法中,有现在,从这个活动之后的任何活动,如
ACTIVITY_B
或ACTIVITY_C
,我都可以调用然后调用
finish()
和ta-da!ACTIVITY_A
是从另一个Activity完成的。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
更新这确实有效
uujelgoq3#
您可以使用Intent标志
FLAG_ACTIVITY_CLEAR_TOP
从堆栈中重新启动Activity并清除其上方的所有内容。这不是你想问的,但可能会有帮助。为此,用途:
yvt65v4c4#
这可以通过使用静态变量来实现。比如使用布尔变量activity_name_dirty = false;一旦出现使特定活动无效的条件,请将其标记为true。因此,在调用此Activity时,请随时检查activity_name_dirty的状态。然后,您可以使用“活动标志”创建新的即时,如Activity Fundamentals中所述