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);
答案 0 :(得分:74)
如果您从startActivityForResult()
致电Fragment
,那么您应该致电startActivityForResult()
而不是getActivity().startActivityForResult()
,因为这会导致Fragment
'{ {1}}。
如果你不确定你在onActivityResult()
的哪个地方打电话,以及你将如何调用方法。
由于startActivityForResult()
得到Activity
的结果,您需要覆盖onActivityResult()
的{{1}}并调用Activity
传播到相应的{ {1}}表示未处理的结果代码或所有。
如果以上两个选项不起作用,请参阅选项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"