我有2个活动,每个活动都在单独的应用程序中。 Activity1有一个用户可以单击的按钮,它使用onClick()
方法中的intent调用第二个活动:
Intent myIntent = getPackageManager().getLaunchIntentForPackage(com.myProject.Activity2);
startActivityForResult(myIntent, 600);
这正确地从Activity1启动了Activity2,但是在Activity2中调用onActivityResult
之前调用了onCreate
,而不是在我设置返回意图的onBackPressed()
中调用。{/ p >
以下是Activity2的onCreate
方法:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
以下是Activity2的onBackPressed
方法的当前版本:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("Stuff", someStuff);
if(getParent()==null){
setResult(Activity.RESULT_OK, intent);
}else{
getParent().setResult(Activity.RESULT_OK, intent);
}
finish();
super.onBackPressed();
}
我的AndroidManifest.xml具有以下针对Activity2的意图过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
我已根据建议[{3}}验证我的launchMode
为standard
(而不是singleTask
等),并且我的请求代码并非负面警告here 。我也尝试了android:launchMode="singleTop"
,但这也是禁止的。
我还尝试在finish()
中调用onBackPressed()
中的super.onBackPressed()
提及here {同样仅intent.putExtra("Stuff", someStuff);
建议here)并再次将其称为{{1}}建议here。
此外,我尝试评论{{1}}行,因为它似乎给here造成了麻烦。
关于我可能做错的任何想法?
答案 0 :(得分:9)
所以这是处理它的最终解决方案:
我将Activity1的意图更改为以下内容:
Intent myIntent = new Intent();
myIntent.setClassName("com.myProject", "com.myProject.Activity2");
startActivityForResult(myIntent, 600);
由于某些原因,Android除了第一个参数给出的包名称外,还需要第二个参数的完全限定名称。现在它有效! :)
答案 1 :(得分:1)
如果在启动活动时设置了“singleInstance”标志,则会发生这种情况。
答案 2 :(得分:0)
不确定您的问题是什么。你在Activity1中创建Intent的方式很奇怪;该方法不适用于创建在同一应用程序中启动另一个活动的意图。一些开发人员使用Intent(Context,Class&lt;&gt;)构造函数。我更喜欢使用Intent(String action)和仅在我的应用程序中定义的自定义操作字符串(这更容易正确编码)。
此外,您为Activity2指定的intent过滤器通常用于直接从主屏幕启动的活动。
activity2的onCreate()代码在哪里? onBackPressed()的代码在哪里?你能告诉我在Activity2中的其他代码之前调用了setResult()吗?您应该在debug中运行活动。确保Activity2正在接收您认为应该的意图,然后逐步跟踪在setResult()之前执行的语句。 不要做的就是在你理解底层问题之前在代码中抛出解决方案。
据我所知,到目前为止,Activity1正在发送一个Intent,然后调用onActivityResult。到目前为止,没有任何其他证据可以证明。