web-dev-qa-db-ja.com

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();
            }
        }
    }
}

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);
27
Parin Parikh

onActivityResultが呼び出されましたが、間違ったインテント参照を使用して結果インテントからデータを取得しています:

getIntent().getStringExtra("teamName")

これに置き換えます:

data.getStringExtra("teamName")

ここでのデータは結果の意図です。

4
Haresh Chhelana

オプション1 :

FragmentからstartActivityForResult()を呼び出す場合は、startActivityForResult()ではなくgetActivity().startActivityForResult()を呼び出す必要があります。これはFragmentonActivityResult()

startActivityForResult()でどこを呼び出しているのか、メソッドをどのように呼び出すのかわからない場合。

オプション2:

ActivityonActivityResult()の結果を取得するので、ActivityonActivityResult()をオーバーライドし、super.onActivityResult()を呼び出して、それぞれのFragment未処理の結果コードまたはすべて。

上記の2つのオプションが機能しない場合は、確実に機能するため、オプション3を参照してください。

オプション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
}
76
Akash Moradiya

Android:noHistory="true"からAndroidManifest.xmlを削除することで問題を解決しました。

11
Android Dev

同じ問題がありました。私の呼び出しアクティビティは「singleInstance」でした。それを削除することで問題が解決しました。

8
spgodara

私はちょうど同じ問題を抱えていて、私が見てきた解決策のどれもが以下に言及していないことに驚いています:

定数RESULT_OKの値は-1であり、メソッドsetResultに値1を指定すると、結果コードはRESULT_OKと等しくならず、条件は処理されません。誰かがこれが役立つことを願っています。

3
Harsha

私は同じ問題を抱えていたので、これらのパラメーターをアクティビティに追加することで解決しました。

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

@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);
1
pradip tilala

この行とその動作を削除しました。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

ヒントをありがとう。

同様の問題があり、私の問題はrequestCodeメソッドで-1に設定されたstartActivityForResultパラメーターに関するものでした。 requestCodeの値を1または0に変更すると、onActivityResultが呼び出され始めました。

0
Arsenius

Pradip tilalaの answer を確認した後、AndroidManifest.xmlから次の行を削除して問題を解決しました。

Android:noHistory="true"
0
Pooja