onActivityResult()未调用

Par*_*ikh 27 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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我开始的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);
Run Code Online (Sandbox Code Playgroud)

Aka*_*iya 77

选项1 :

如果你调用startActivityForResult()Fragment,那么你应该调用startActivityForResult(),而不是getActivity().startActivityForResult(),因为它会导致FragmentonActivityResult().

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

选项2:

由于Activity获得了结果onActivityResult(),您将需要覆盖Activity's onActivityResult()并调用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);
}
Run Code Online (Sandbox Code Playgroud)

在儿童班:

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

  • 如果您对我的回答感到满意,请接受吗? (4认同)

And*_*Dev 11

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


spg*_*ara 8

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


Har*_*ana 6

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

getIntent().getStringExtra("teamName")
Run Code Online (Sandbox Code Playgroud)

替换为:

data.getStringExtra("teamName")
Run Code Online (Sandbox Code Playgroud)

这里的数据是结果意图。


Ars*_*ius 5

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