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
希望对您有所帮助...
我有一个 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
希望对您有所帮助...