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")
ここでのデータは結果の意図です。
Fragment
からstartActivityForResult()
を呼び出す場合は、startActivityForResult()
ではなくgetActivity().startActivityForResult()
を呼び出す必要があります。これはFragment
のonActivityResult()
。
startActivityForResult()
でどこを呼び出しているのか、メソッドをどのように呼び出すのかわからない場合。
Activity
はonActivityResult()
の結果を取得するので、Activity
のonActivityResult()
をオーバーライドし、super.onActivityResult()
を呼び出して、それぞれのFragment
未処理の結果コードまたはすべて。
上記の2つのオプションが機能しない場合は、確実に機能するため、オプション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
@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デバイスでは正常に動作しています Marshmallowで、ただし、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);
ヒントをありがとう。
同様の問題があり、私の問題はrequestCode
メソッドで-1に設定されたstartActivityForResult
パラメーターに関するものでした。 requestCode
の値を1または0に変更すると、onActivityResult
が呼び出され始めました。
Pradip tilalaの answer を確認した後、AndroidManifest.xmlから次の行を削除して問題を解決しました。
Android:noHistory="true"