startActivityforResult from fragment - 从图库中获取图像

startActivityforResult from fragment - get Image from gallery

我有一个 activity 寄存器,它使用 fragmentpageradapter 将片段容器作为 viewpager。这有点像带有下一个和上一个按钮的向导形式。

在寻呼机内的第二个片段中,我尝试使用以下代码从画廊获取图像:

private void getAvaFromGallery() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_PICK);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), RESULT_LOAD_IMAGE);
}
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode,data);
        if(resultCode == getActivity().RESULT_OK) {
            if (requestCode == RESULT_LOAD_IMAGE) {
                CompressBitmap cb = new CompressBitmap(getActivity());
                selectedImageUri = cb.handleImageUri(data.getData());
                String filepath = cb.getFilename();
                bitmap = cb.compressImage(cb.getRealPathFromURI(getActivity(), selectedImageUri), filepath);
                photo.setImageBitmap(bitmap);
                Log.d("FilePath", filepath);
            }
        }
    }

获取数据后,我尝试将其压缩为png并将其放入imageview。但我认为在这种情况下不会调用 onactivityresult。

我试过只在 activity 中使用片段,这是可行的。但在我的例子中,片段在带有寻呼机适配器的片段内。

我希望有人能帮助我..

我也遇到了类似的问题。 以下是对我有用的解决方案。代码用于 Draweractivity,但我在 DrawerActivity 中使用了 FragmentPagerAdapter。

  • 首先,如果您正在调用 startActivityForResult(),则不要直接调用该方法。而是在子片段中调用 getParentFragment().startActivityForResult()。
  • 正常执行 onActivityResult(),不对 Child 片段进行任何修改。
  • 现在在 Main activity 中,它是父片段和子片段的父片段(在我的例子中是 Drawer activity)在 onActivityResult() 中实现以下代码将 activity 结果遍历到它的所有子片段。

    for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment != null)
            {
                fragment.onActivityResult(p_requestCode, p_resultCode, p_data);
            }
        }
    
  • 在Parent fragment的onactivityresult()中,我们需要再次实现调用子fragment的onActivityResult()的代码。

List<Fragment> fragments = getChildFragmentManager().getFragments();
            if (fragments != null)
        {
            for (Fragment fragment : fragments)
            {
                Log.e("SupportFragment", fragment.getClass().getSimpleName());
                if(fragment instanceof ContactUsFragment)
                {
                    fragment.onActivityResult(p_requestCode, p_resultCode, p_data);
                }
            }
        }

注意:代码和片段取自给定的解决方案 here

希望对您有所帮助...