onActivityResult()未调用

问题描述 投票:26回答:8

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);
android android-fragments onactivityresult
8个回答
4
投票

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

getIntent().getStringExtra("teamName")

替换为:

data.getStringExtra("teamName")

这里的数据是结果意图。


76
投票

选项1 :

如果你从startActivityForResult()调用Fragment然后你应该调用startActivityForResult()而不是getActivity().startActivityForResult(),因为它将导致FragmentonActivityResult()

如果你不确定你在哪里调用startActivityForResult()以及你将如何调用方法。

选项2:

由于Activity得到onActivityResult()的结果,你需要覆盖ActivityonActivityResult()并调用super.onActivityResult()传播到相应的Fragment以获取未处理的结果代码或所有。

如果以上两个选项不起作用,那么请参考选项3,因为它肯定会起作用。

选项3:

FragmentonActivityResult()的明确调用函数如下

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

在父类中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);
}

在儿童班:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //in fragment class callback
}

11
投票

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


8
投票

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


3
投票

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

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


1
投票

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

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

0
投票

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


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时)。它在带有Marshmallow的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);

0
投票

删除此行,其工作正常。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

谢谢你的暗示。

© www.soinside.com 2019 - 2024. All rights reserved.