Fragment 中的 onActivityResult 从未调用过
Posted
技术标签:
【中文标题】Fragment 中的 onActivityResult 从未调用过【英文标题】:onActivityResult inside Fragment never called 【发布时间】:2020-11-15 03:54:08 【问题描述】:我托管了加载片段的活动 (HomeActivty)。我的问题是,每当我单击 Fragment 中的 captureimage 按钮时,相机成功启动,但未触发 onActivityResult 方法,它返回 null 并崩溃。
Here is my Fragemt class code:
private void dispatchTakePictureIntent()
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null)
// Create the File where the photo should go
File photoFile = null;
try
photoFile = createImageFile();
catch (IOException ex)
ex.printStackTrace();
// Error occurred while creating the File
if (photoFile != null)
photoURI = FileProvider.getUriForFile(getActivity(),
BuildConfig.APPLICATION_ID + ".provider",
photoFile);
mPhotoFile = photoFile;
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
onActivityResult 方法:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
if (requestCode == REQUEST_TAKE_PHOTO)
try
mPhotoFile = mCompressor.compressToFile(mPhotoFile);
catch (IOException e)
e.printStackTrace();
String filePath = mPhotoFile.getPath();
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
if(w>h)
takepicture.setImageBitmap(RotateBitmap(bitmap,90));
else
Glide.with(getActivity()).load(mPhotoFile).apply(new RequestOptions().centerCrop().placeholder(R.drawable.takepicture)).into(takepicture);
else if (requestCode == REQUEST_GALLERY_PHOTO)
Uri selectedImage = data.getData();
try
mPhotoFile = mCompressor.compressToFile(new File(getRealPathFromUri(selectedImage)));
catch (IOException e)
e.printStackTrace();
String filePath = mPhotoFile.getPath();
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
if(w>h)
takepicture.setImageBitmap(RotateBitmap(bitmap,90));
else
Glide.with(getActivity()).load(mPhotoFile).apply(new RequestOptions().centerCrop().placeholder(R.drawable.takepicture)).into(takepicture);
这个 onActivityResult 方法不叫我能做什么请帮帮我。
【问题讨论】:
如果不调用onActivityResult
,是什么导致您的应用程序崩溃?分享崩溃日志。
日志中没有显示与此问题相关的内容
【参考方案1】:
我猜你也在 HomeActivity
类中覆盖 onActivityResult()。因此请确保它还调用super.onActivityResult()
将未处理的结果代码移交给Fragment 等子组件。
【讨论】:
是的,我正在覆盖 'onActivityResult() 并且还在 HomeActivity 中调用 super.onActivityResult(),但问题仍然存在..请您分享一些代码。 能否也分享一部分 HomeActivity 代码 "@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) super.onActivityResult(requestCode, resultCode, data); 片段片段 = getSupportFragmentManager().findFragmentById(R.id .fragment_location_share); fragment.onActivityResult(requestCode, resultCode, data); " 看起来微不足道。你能在你的 HomeActivity 中完全删除这个覆盖吗? 还是同样的问题【参考方案2】:我认为您应该尝试在单独的活动中运行相机,比如说 CameraActivity。 在那里,启动相机,最后得到结果并调用完成。 在 HomeActivity 中已经捕捉到 onActivityResult
【讨论】:
以上是关于Fragment 中的 onActivityResult 从未调用过的主要内容,如果未能解决你的问题,请参考以下文章
当在Fragment中使用startActivityForResult()方法打开一个Activity,但是这个Fragment的onActivityResult方法不执行
activity 嵌套一级fragment,一级fragment嵌套二级fragment,在一级fragment中刷新二级fragment中的UI
Fragment中的ViewPager的Fragment添加子Fragment要放在onAttach中添加