1. ホーム
  2. android

[解決済み] onActivityResultが呼び出し中のアクティビティで呼び出されない

2022-01-31 05:29:30

質問

FragmentActivityで、結果を得るために別のアクティビティを開始させています。 呼び出されたアクティビティが終了すると、onActivityResultが呼び出されません。 AppCompatActivityアクティビティ(FragmentActivityから継承)を使用していることに違いはあるのでしょうか? ドキュメントには、結果は呼び出し元のフラグメントに返されると書かれていますが、この場合、フラグメントではなくアクティビティなのです。 以下は、非常にシンプルなコードです。

MainActivityです。

public class SMSEmailActivityNew extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //setup activity....
      Intent i = new Intent(this, EulaActivity.class);
      i.putExtra(Globals.keyFileName,Globals.FILE_EULA );
      startActivityForResult(i,RESULT_OK);
   }

   //this method is never called
   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data)  {
      super.onActivityResult(requestCode, resultCode, data); 
      //dowork .....
   }

}

アクティビティを呼び出した。

EulaActivity extends AppCompatActivity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //set up activity ....
    }

    public void onClick(View v) {
       Intent result = new Intent();
       if (bPermissionGranted) {
           setResult(Activity.RESULT_OK, result);
           // Determine if EULA was accepted this time

         getSharedPreferences().edit().putBoolean(Globals.KEY_EULA_ACCEPTED, true).apply();

        } else {
           setResult(Activity.RESULT_CANCELED, result);
        }
        finish();

  }


}

解決方法は?

によると ドキュメント を渡す必要があります。 requestId は0より大きいか等しい。 RESULT_OK-1 . また RESULT_OK はリクエストコードではなく、結果コードのように動作します。 startActivityForResult は、リクエストコードが必要です。

次のようなものです。 startActivityForResult(intent, 0);

また、仕上げに EulaActivity を使って finishActivity(yourPreviousRequestCode); この場合 0 .