我是Android编程的新手。
我有一个MainActivity,我可以从中启动SecondActivity:
[...]
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("mode", eTravelEditMode.Create);
startActivityForResult(intent, MainActivity.REQUEST_CREATE);
[...]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MainActivity.REQUEST_CREATE) {
}
}
在SecondActivity中,我启动了ThirdActivity:
[...]
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, SecondActivity.REQUEST_SELECT);
[...]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//this method is never called
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SecondActivity.REQUEST_SELECT) {
[...]
}
在ThirdActivity中:
@Override
public void onBackPressed() {
Intent intent = new Intent();
//intent.putExtra("returnValue", (Serializable) mAdapter.getSelectedValues());
setResult(SecondActivity.RETURN_SELECT, intent);
super.onBackPressed();
this.finish();
}
From ThirdActivity我想按后退按钮时将值返回到其父SecondActivity。 但是,从未调用过SecondActivity.onActivityResult。 调用MainActivity.onActivityResult。
关于什么是错的任何想法?
答案 0 :(得分:2)
无论您在为Android开发方面有多么有经验,处理意图和管理活动堆栈都是棘手的。一般来说,您不应该按后退按钮以便在应用逻辑中向前移动。我有3点:
解释:如果您想从ThirdActivity回到SecondActivity,只需
调用finish()
会为你做这件事,因为你开始了第三个
使用startActivityForResult(intent)与使用的活动
startActivity(意向)。所以我认为你的代码中发生的是什么
你实际上是通过android的Back Stack返回的
导航系统,和再次通过finish()
返回。所以你回去两次,这就是为什么你要回到主要活动。我想。
可以找到有关活动堆栈和后退导航的更多信息 这里: https://developer.android.com/training/implementing-navigation/temporal.html
finish()
,而不是使用android后退导航。我会远离你使用你的后退按钮作为
适用于您的应用的进展方式。finish()
是您的应用逻辑的自然进展,因为
通常,你想要的startActivityForResult(意图)vs
startActivity(意图)。答案 1 :(得分:0)
我刚刚看了一下我的AndroidManifest.xml:
<activity android:name=".forms.SecondActivity"
android:label="@string/mylabel"
android:noHistory="true"
>
我删除了“android:noHistory =”true“”,现在一切顺利。 我认为从helloworld复制/粘贴,我很困惑! :) 谢谢
答案 2 :(得分:-2)
试试这个!
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(CurrentActivity.this, A.class);
startActivity(intent);
}