1. ホーム
  2. android

[解決済み] FragmentでonActivityResultが呼び出されない

2022-03-18 17:45:57

質問

このフラグメントをホストしているアクティビティは、その onActivityResult は、カメラアクティビティが戻ったときに呼び出されます。

私のフラグメントは、カメラで写真を撮るために送られたインテントで、結果に対するアクティビティを開始します。写真アプリケーションは正常にロードされ、写真を撮影して戻ります。このとき onActivityResult しかし、一度もヒットしません。ブレークポイントを設定しましたが、何もトリガーされません。フラグメントに onActivityResult ? 提供されている機能なので、そう思うのですが。なぜこれが起動しないのでしょうか?

ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, 1888);
    }
});

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if( requestCode == 1888 ) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
    }
}

解決方法は?

ホスティング活動のオーバーライド onActivityResult() を呼び出したわけではありません。 super.onActivityResult() を処理しきれない結果コードに対して どうやら、フラグメントが startActivityForResult() を呼び出すと、アクティビティはその結果を最初に処理することになります。これは、フラグメントのモジュール性を考慮すると、理にかなっています。一度、私が実装した super.onActivityResult() が処理されない結果に対して、フラグメントは結果を処理する機会を得ました。

あと、@siqingの回答から。

結果をフラグメントに反映させるために startActivityForResult(intent,111); ではなく getActivity().startActivityForResult(intent,111); をフラグメントの中に入れてください。