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中的fragment如何显示出来

Fragment中的ViewPager的Fragment添加子Fragment要放在onAttach中添加

Fragment系列:布局xml中的fragment标签,如何隐藏?

Fragment 中的 Fragment 不能保留它们的值