我有 3 个活动 A、B 和 C。A 导致 B 导致 C。我希望能够在 A 和 B 之间来回移动,但是一旦 C 开始,我想完成 A 和 B。我了解如何在通过意图启动 C 时关闭 B,但是如何在 C 启动时关闭 A?
问问题
13112 次
4 回答
15
在您的onCreate()
方法中,将静态实例分配给变量以创建单例:
public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
@Override
public void finish() {
super.finish();
instance = null;
}
然后在 C 中:
public void onCreate(Bundle savedInstanceState) {
if(ActivityA.instance != null) {
try {
ActivityA.instance.finish();
} catch (Exception e) {}
}
}
(对 B 和 A 重复上述代码)
我会说这并不优雅,并且必然会引入奇怪的生命周期错误。
如果您可以调整您的要求会更好 - 如果您不能,您也许可以使用单个 Activity 并将 A、B 和 C 更改为Fragments
?
我会建议广播,但据我了解,您不能在“非恢复”活动中使用实例级广播接收器。
使用 aService
绑定到活动似乎有点矫枉过正 - 但如果上述方法不起作用,您可能需要考虑这一点。
祝你好运!
于 2013-04-03T16:09:28.043 回答
3
((Activity)context_of_another_activity).finish();
于 2014-12-16T07:21:35.540 回答
1
我意识到这是一个很晚的回应,但我觉得这BroadcastReceiver
是解决这个问题的最佳方法。
在活动 A 中添加这个
//class object
BroadcastReceiver receiver;
//add this to onCreate()
receiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
IntentFilter filter =new IntentFilter();
filter.addAction("FINISH_A");
registerReceiver(receiver, filter);
//add this to Activity A as well
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
然后,在活动 C onCreate() 中(或者当你想完成活动 A 时)
Intent local =new Intent();
local.setAction("FINISH_A");
sendBroadcast(local);
于 2020-08-27T22:46:33.277 回答
-1
当你从 B 开始 C 时,这样做:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
现在,C 开始了,但是 A 和 B 已经消失了。
但是,我认为最好重新考虑您的设计,使 C 不依赖于 A 是否完成。
于 2013-04-03T16:01:24.333 回答