Android的onActivityResult叫早(Android onActivityResul

2019-09-16 09:25发布

我有2个活动,每个单独的应用程序。 活性1上有一个按钮,用户可以点击并调用使用其意图第二活动onClick()方法:

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

这正常启动活性2,从活动1,但onActivityResult被称为活性1之前onCreate在活性2被调用,而不是onBackPressed()我设置了回报意图。

这里是onCreate的活性2方法:

@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等),如建议在这里和警告我请求代码不为负这里 。 我也试过android:launchMode="singleTop" ,但是这是一个还没有走。

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

另外我想注释掉行intent.putExtra("Stuff", someStuff); 因为它似乎造成麻烦这个人 。

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

Answer 1:

因此,这里是照顾它的最终解决方案:

我改变了对意向到活动1以下:

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

出于某种原因,Android的需要,除了由第一个参数给出的包名,第二个参数完全合格的名称。 现在,它的作品! :)



Answer 2:

如果当你开始练习“singleInstance”标志就会出现这种情况。



Answer 3:

不能确定你的问题是什么。 你创造活动1的意图的方式是奇数; 该方法并不意味着用于创建可在同一应用程序启动另一个活动的意图。 有些开发人员使用意图(上下文,类<>)构造。 我更喜欢使用意向(字符串操作),只有在我的应用程序定义的自定义操作字符串(这是比较容易正确的代码)。

此外,您已经为活性2指定的意图过滤器通常用于多数民众赞成直接从主屏幕发起的活动。

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

据我目前可以告诉,活性1散发出的意图,然后onActivityResult被调用。 到目前为止,没有别的证明。



文章来源: Android onActivityResult called early