Android startActivityforResult from fragment-从gallery获取图像

Android startActivityforResult from fragment-从gallery获取图像,android,android-fragments,fragmentpageradapter,startactivityforresult,Android,Android Fragments,Fragmentpageradapter,Startactivityforresult,我有一个活动寄存器,它使用fragmentpageradapter将片段容器作为viewpager。这有点像wizzard表单,带有next和prev按钮 在寻呼机内的第二个片段中,我尝试使用以下代码从图库中获取图像: private void getAvaFromGallery() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_PICK)

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

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

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

我只尝试了内部活动的片段,这就是工作。但在我的例子中,片段位于带有寻呼机适配器的片段内部


我希望有人能帮助我。

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

  • 首先,如果要调用startActivityForResult(),则不要直接调用该方法。而是在子片段中调用getParentFragment().startActivityForResult()
  • 正常实现onActivityResult(),而不在子片段中进行任何修改
  • 现在,在主活动中,它是父片段和子片段的父级(在我的例子中是抽屉活动),在onActivityResult()中实现下面的代码,它将活动结果遍历到它的所有子片段

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

  • for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment != null)
            {
                fragment.onActivityResult(p_requestCode, p_resultCode, p_data);
            }
        }
    
List fragments=getChildFragmentManager().getFragments();
if(片段!=null)
{
for(片段:片段)
{
e(“SupportFragment”,fragment.getClass().getSimpleName());
if(ContactUsFragment的片段实例)
{
onActivityResult(p_请求代码、p_结果代码、p_数据);
}
}
}
注意:代码和代码片段取自给定的解决方案


希望对您有所帮助……

我已经尝试了您的代码,但我发现了这个错误。我有另一个片段,它使用相同的活动通过api facebook登录。尝试在空对象引用上调用接口方法“boolean com.facebook.CallbackManager.onActivityResult(int,int,android.content.Intent)”。获取错误的onActivityResult()方法是facebook的。我们正在调用活动的onActivityResult()方法。您需要一些机制来分离这些回调方法