对于Android,假设3个活动a1 a2 a3及其点击层次结构为a1-> a2-> a3。
我的问题是在a2中,如何通过按后退键从a3中检测到它,而不是从a1中输入?
答案 0 :(得分:9)
您可以使用onActivityResult
检查其他活动的回复。将此代码放在您的a2活动中......
将请求代码声明为活动顶部的常量:
public static final int OPEN_NEW_ACTIVITY = 123456;
将它放在开始新活动的地方:
Intent intent = new Intent(this, NewActivity.class);
startActivityForResult(intent, OPEN_NEW_ACTIVITY);
活动结束后执行某些操作。文档建议您使用resultCode
,但根据具体情况,按下按钮时,您的结果可以是RESULT_OK
或RESULT_CANCELED
。所以我会把它留下来。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OPEN_NEW_ACTIVITY) {
// Execute your code on back here
// ....
}
}
出于某种原因,我把它放在片段中时遇到了麻烦。所以你必须把它放在Activity中。
您实际上不必在a3活动中添加任何代码,但如果您愿意,可以发回数据。
答案 1 :(得分:6)
onCreate
在遇到背压时不会被调用。
通过后退按键可以通过多种方式推断您是否已经到达此活动。
在boolean
上调用的oncreate中设置onCreate
。
通过调用startActivityForResult
启动C活动,当您从C onActivityResult
返回时,将调用它。
答案 2 :(得分:4)
在开始活动时加入一些关键意图。
Intent intent = new Intent(getBaseContext(), A1Activity.class);
intent.putExtra("I_CAME_FROM", "a1");
startActivity(intent)
在打开的活动中阅读:
String flag = intent.getStringExtra("I_CAME_FROM");
if(flag.equlas("a1")){
//you came from a1 activity
}
这样您就可以了解自己的来源。
答案 3 :(得分:3)
您可以使用以下方法
首次创建活动时的 onCreate()
(从a1到a2)。当您通过按下后退按钮返回时,不会调用此方法。
onRestart()
活动处于后台并进入前台(在a3中按下)
答案 4 :(得分:1)
您可以通过调用:
来检测到该活动是从另一个活动返回的onRestart()
并在此功能中添加所需的内容