来自片段的startActivityforResult - 从图库中获取图像

时间:2016-01-06 13:09:36

标签: android android-fragments fragmentpageradapter startactivityforresult

我有一个活动寄存器,它使用fragmentpageradapter将片段容器作为viewpager。这有点像带有next和prev按钮的wizzard形式。

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

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。

我只尝试使用片段内部活动,这是有效的。但在我的情况下,片段是带有寻呼机适配器的片段。

我希望有人可以帮助我..

1 个答案:

答案 0 :(得分:1)

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

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

    for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment != null)
            {
                fragment.onActivityResult(p_requestCode, p_resultCode, p_data);
            }
        }
    
  • 在Parent片段的onactivityresult()中,我们再次需要实现代码来为它的子片段调用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

的解决方案

希望它有所帮助...

相关问题