Android onActivityResult提前调用

时间:2012-04-06 20:21:26

标签: android android-intent android-activity

我有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}}验证我的launchModestandard(而不是singleTask等),并且我的请求代码并非负面警告here 。我也尝试了android:launchMode="singleTop",但这也是禁止的。

我还尝试在finish()中调用onBackPressed()中的super.onBackPressed()提及here {同样仅intent.putExtra("Stuff", someStuff);建议here)并再次将其称为{{1}}建议here

此外,我尝试评论{{1}}行,因为它似乎给here造成了麻烦。

关于我可能做错的任何想法?

3 个答案:

答案 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。到目前为止,没有任何其他证据可以证明。