2012-04-06 44 views
8

我有2个活动,每个活动在单独的应用程序中。活动1有一个按钮,用户可以点击并在其onClick()方法调用使用意向的第二个活动:Android onActivityResult早期调用

Intent myIntent = getPackageManager().getLaunchIntentForPackage(com.myProject.Activity2); 
startActivityForResult(myIntent, 600); 

这正确地从活动1启动活性2,但onActivityResult被称为活性1 onCreate之前被称为活性2,而不是在onBackPressed()的地方,我设置了返回意向。

这里是活性2的onCreate方法:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

这里是onBackPressed方法的活性2当前版本:

@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中有活性2以下意图过滤器:

<intent-filter> 
    <action android:name="android.intent.action.MAIN"/> 
    <category android:name="android.intent.category.LAUNCHER"/> 
</intent-filter> 

我确认我的launchModestandard(而不是singleTask等),建议here和我的请求代码是不负面的,因为警告here。我也试过android:launchMode="singleTop",但那也是不行的。

我也试过提到here(也只有super.onBackPressed()的建议here),并再次调用它的建议here不是活性2调用onBackPressed()finish()

此外,我试图注释掉intent.putExtra("Stuff", someStuff);行,因为它似乎造成this person麻烦。

任何想法,我可能做错了什么?

回答

9

所以这里是照顾它的最终解决方案:

我改变了原意为活动1以下几点:

Intent myIntent = new Intent(); 
myIntent.setClassName("com.myProject", "com.myProject.Activity2"); 
startActivityForResult(myIntent, 600); 

出于某种原因的Android需要为第二个参数的完全限定名除了第一个参数给出的包名之外。现在它工作了! :)

+1

非常感谢您回来并发布您的解决方案。我一直在这个问题上停留了很长时间,我也尝试了在你的问题中遇到的所有解决方案都无济于事。这固定它,并使我的一天更好= = – 2012-10-10 20:02:54

+0

我使用startActivityForResult WITHOUT setClassName或完全限定的名称遍布我的项目,他们都工作完美,除了一种情况。所以我在这种情况下尝试了你的解决方案,但它没有任何区别。 – user316117 2013-03-28 19:10:21

+0

2h !!谢谢你的解决方案 – Anthone 2014-09-10 16:55:57

0

不确定你的问题是什么。您在Activity1中创建Intent的方式很奇怪;该方法不适用于创建在同一应用中启动另一个活动的意图。一些开发人员使用Intent(上下文,类<>)构造函数。我更喜欢使用Intent(字符串操作)和只在我的应用程序中定义的自定义操作字符串(这更容易正确编码)。

另外,您为Activity2指定的意图过滤器通常用于直接从主屏幕启动的活动。

活动2的onCreate()代码在哪里? onBackPressed()的代码在哪里?你能向我证明setResult()在Activity2中的其他代码之前被调用吗?您应该在调试中运行这些活动。确保Activity2正在接收你认为它应该的意图,然后逐步跟踪直到setResult()之前执行的语句。 而不是要做的事情是在你明白底层问题是什么之前,在代码中抛出解决方案。

据我目前所知,Activity1发出一个Intent,然后onActivityResult被调用。迄今为止没有任何其他证明。

+0

感谢您的评论 - 我已经将'onCreate'和'onBackPressed'方法添加到问题中。我运行调试很多次,并使用断点,我能够显示Activity1的'onActivityResult'在Activity2第一次启动时被调用 - 在Activity2返回之前,并且在返回时不再被调用。 – user1205577 2012-04-09 13:59:34

+0

我也尝试使用Intent(context,Activity2.class)创建一个intent,但它抱怨说它找不到该类(可能是因为它在另一个应用程序中)。我尝试了一些使用完全合格的路径名称的变体,这也是一个不行。 – user1205577 2012-04-09 14:02:17

1

如果在启动活动时设置了“singleInstance”标志,则会发生此情况。

+0

谢谢jbaylina你的回答对我有帮助 – Swapnil 2015-04-10 04:31:58