当相机活动返回时,承载这个片段的活动有它的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);
    }
}

当前回答

只需简单地调用:

startActivityForResult(intent, "1");

其他回答

添加这个

public void onClick(View v) {   
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, 1);
}

当你将替换你的代码与上述代码,然后自动你的这个

public void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data){}

方法将开始工作

//No Need to write this code in onclick method
    Intent intent=new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT)
    startActivityForResult(intent,1);
    Toast.makeText(getContext(), "image"+intent, Toast.LENGTH_SHORT).show();

如果还有人做不到,我可以加两个建议。在Manifest.xml文件中,确保主机活动在回调时没有结束,并且要启动的活动具有标准的启动模式。 详情如下:

对于托管活动,如果有,则将no history属性设置为false

android:noHistory="false"

对于要启动的Activity,如果有,将启动模式设置为标准

android:launchMode="standard"

如果在Facebook登录时遇到上述问题,那么你可以在你的片段的父活动中使用下面的代码:

Fragment fragment = getFragmentManager().findFragmentById(android.R.id.tabcontent);
fragment.onActivityResult(requestCode, resultCode, data);

Or:

Fragment fragment = getFragmentManager().findFragmentById("fragment id here");
fragment.onActivityResult(requestCode, resultCode, data);

并在你的片段中添加下面的调用…

callbackManager.onActivityResult(requestCode, resultCode, data);

onActivityResult现在已弃用。你可以使用follow code:

   registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result->
    // here you can handle result, result.data and result.resultCode
   }

对于启动活动

    val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
    launcher.launch(intent)

如果你正在使用嵌套片段,这也是可行的:

getParentFragment().startActivityForResult(intent, RequestCode);

除此之外,你还得打电话给管理员。来自父activity的onActivityResult,并填充片段的onActivityResult方法。