1

我有一个活动寄存器,它使用 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 。

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

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

4

1 回答 1

2

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

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

    for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment != null)
            {
                fragment.onActivityResult(p_requestCode, p_resultCode, p_data);
            }
        }
    
  • 在父片段的 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);
                }
            }
        }

注意:代码和片段取自此处给出的解决方案

希望能帮助到你...

于 2016-01-06T13:26:08.073 回答