8

我有 2 个活动,每个活动都在单独的应用程序中。Activity1 有一个用户可以单击的按钮,它在其onClick()方法中使用意图调用第二个活动:

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

这会正确地从 Activity1 启动 Activity2,但onActivityResult会在 Activity2 中onCreate调用之前在 Activity1 中调用,而不是在onBackPressed()我设置返回意图的位置。

这是onCreateActivity2的方法:

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

这是onBackPressedActivity2 方法的当前版本:

@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>

我验证了我launchMode的是standard(而不是singleTask等),正如这里所建议的那样,并且我的请求代码并不像这里警告的那样为负。我也试过android:launchMode="singleTop"了,但这也是不行的。

我还尝试不调用此处提到的 Activity2 finish()(也按照此处的建议),并再次按照此处的建议调用它。onBackPressed()super.onBackPressed()

此外,我尝试注释掉该行intent.putExtra("Stuff", someStuff);,因为它似乎给这个人造成了麻烦。

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

4

3 回答 3

10

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

我将 Activity1 的意图更改为以下内容:

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

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

于 2012-04-09T15:44:17.620 回答
1

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

于 2013-10-17T12:30:05.097 回答
0

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

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

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

据我所知,Activity1 正在发送一个 Intent,然后调用 onActivityResult。到目前为止,没有任何其他证据可以证明。

于 2012-04-06T20:59:15.013 回答