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);
onActivityResult被调用但使用错误的意图引用从结果意图中获取数据:
getIntent().getStringExtra("teamName")
替换为:
data.getStringExtra("teamName")
这里的数据是结果意图。
如果你从startActivityForResult()
调用Fragment
然后你应该调用startActivityForResult()
而不是getActivity().startActivityForResult()
,因为它将导致Fragment
的onActivityResult()
。
如果你不确定你在哪里调用startActivityForResult()
以及你将如何调用方法。
由于Activity
得到onActivityResult()
的结果,你需要覆盖Activity
的onActivityResult()
并调用super.onActivityResult()
传播到相应的Fragment
以获取未处理的结果代码或所有。
如果以上两个选项不起作用,那么请参考选项3,因为它肯定会起作用。
从Fragment
到onActivityResult()
的明确调用函数如下
在父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
}
我通过从android:noHistory="true"
删除AndroidManifest.xml
解决了我的问题。
我有同样的问题。我的通话活动是'singleInstance'。删除它解决了我的问题。
我只是遇到了同样的问题而且我很惊讶我所看到的解决方案都没有提到以下内容:
常量RESULT_OK的值为-1,如果在方法setResult中给出值1,则结果代码将不等于RESULT_OK,并且不会处理条件。我希望有人觉得这很有帮助。
我有同样的问题,我通过将这些参数添加到活动来解决这个问题:
AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop
我有类似的问题,我的问题是关于requestCode
参数,在startActivityForResult
方法中设置为-1。因此,当我将requestCode
值更改为1或0时,onActivityResult
开始被调用。
在提到@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);
删除此行,其工作正常。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
谢谢你的暗示。