onActivityResult()未调用

时间:2014-11-18 06:31:31

标签: android android-fragments onactivityresult

onActivityResult()没有被调用。以下是我的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to

    Log.e("CALLED", "OnActivity Result");

    if (requestCode == TEAM_SELECTED_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            try {
                 mySelectedTeam = getIntent().getStringExtra("teamName");
                txtSelectTeamCreateMatch.setText(mySelectedTeam);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

我在这里开始SelectTeamActivity

Intent intent=new Intent(CreateMatch.this,SelectTeamActivity.class);
startActivityForResult(intent, TEAM_SELECTED_REQUEST_CODE);
//overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);

Intent intent = getIntent();
intent.putExtra("teamID", teamDataList.get(position).getTeamId().toString());
intent.putExtra("teamName", teamDataList.get(position).getTeamName().toString());
setResult(1, intent);

10 个答案:

答案 0 :(得分:74)

选项1:

如果您从startActivityForResult()致电Fragment,那么您应该致电startActivityForResult()而不是getActivity().startActivityForResult(),因为这会导致Fragment'{ {1}}。

如果你不确定你在onActivityResult()的哪个地方打电话,以及你将如何调用方法。

选项2:

由于startActivityForResult()得到Activity的结果,您需要覆盖onActivityResult()的{​​{1}}并调用Activity传播到相应的{ {1}}表示未处理的结果代码或所有。

如果以上两个选项不起作用,请参阅选项3,因为它肯定会有效。

选项3:

onActivityResult()super.onActivityResult()的明确呼叫功能如下

在父Fragment类中,覆盖Fragment,甚至覆盖onActivityResult()类中的相同内容,并调用以下代码。

在父类中:

Activity

在儿童班:

onActivityResult()

答案 1 :(得分:10)

我通过从android:noHistory="true"移除AndroidManifest.xml解决了我的问题。

答案 2 :(得分:7)

我有同样的问题。我的通话活动是' singleInstance'。删除它解决了我的问题。

答案 3 :(得分:4)

onActivityResult被调用但使用错误的意图引用从结果意图中获取数据:

getIntent().getStringExtra("teamName")

替换为:

data.getStringExtra("teamName")

这里的数据是结果意图。

答案 4 :(得分:3)

我遇到了同样的问题,我很惊讶我所看到的解决方案都没有提到以下内容:

常量RESULT_OK的值为-1,如果在方法setResult中给出值1,则结果代码将不等于RESULT_OK,并且不会处理条件。 我希望有人觉得这很有帮助。

答案 5 :(得分:1)

我遇到了同样的问题,我通过将这些参数添加到活动来解决这个问题:

AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop

答案 6 :(得分:0)

我有类似的问题,我的问题是关于在requestCode方法中设置为-1的startActivityForResult参数。 因此,当我将requestCode的值更改为1或0时onActivityResult开始被调用。

答案 7 :(得分:0)

在引用@spgodara的答案后。

我的AndroidManifest.xml课程的学习水平低于SecondActivity

<activity android:name=".SecondActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/AppThemeHome"
        android:windowSoftInputMode="adjustResize"/>

我放置了简单的Toast来查找何时调用onActivityResult的回调MainActivity。我发现在创建SecondActivity时(在SecondActivity打开时)就调用了它。 在棉花糖的Redmi Note 3设备上运行正常但在Kitkat设备上运行

从上面提到的AndroidManifest.xml减速中删除以下行之后:

android:launchMode="singleTask"

并像下面这样调用意图对我有用:

 Intent intent = new Intent(this, SecondActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);

答案 8 :(得分:0)

删除了此行及其正常工作。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

感谢提示。

答案 9 :(得分:0)

查看了pradip tilala的answer之后,我通过从AndroidManifest.xml中删除以下行来解决了我的问题

android:noHistory="true"