我在我的Activity中包含的一个视图寻呼机标签(片段)中有一个ImageView。我正在尝试从库中加载图像,但似乎onActivityResult被称为父活动。我搜索并尝试了很多解决方案,但没有一个有效。最接近的方法是写下这个:
在家长活动中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
在父片段中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
在儿童片段中:
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
getParentFragment().startActivityForResult(Intent.createChooser(intent, "Select Picture"), LOAD_IMAGE_GALLARY);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == LOAD_IMAGE_GALLARY) {
if (data != null) {
picUri = data.getData();
CropImage();
}
} else if (requestCode == CROP_IMAGE) {
if (data != null) {
// get the returned data
Bundle extras = data.getExtras();
// get the cropped bitmap
photo = extras.getParcelable("data");
flat_photo.setImageBitmap(photo);
if (pic != null) {
// To delete original image taken by camera
if (pic.delete()) {
}
}
}
}
}
}
protected void CropImage() {
try {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(picUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("outputX", 400);
intent.putExtra("outputY", 300);
intent.putExtra("aspectX", 4);
intent.putExtra("aspectY", 3);
intent.putExtra("scaleUpIfNeeded", true);
intent.putExtra("return-data", true);
getParentFragment().startActivityForResult(intent, CROP_IMAGE);
} catch (ActivityNotFoundException e) {
Toast.makeText(getContext(),
"Sorry, your device don't support cropping.",
Toast.LENGTH_SHORT).show();
}
}
此代码中发生的情况是,当我完成裁剪并按下提交时出现裁剪窗口,它再次出现,然后按下提交完成活动。简而言之,它不起作用。
有几个用户发布了数百个解决方案。请尝试写一个工作的。非常感谢。
答案 0 :(得分:1)
onActivityResult
()将始终在Activity中调用。它永远不会返回片段中的结果。您可以做的是,一旦您在活动中获得结果,您就可以将结果传递给您在问题本身中发布的片段。
fragment.onActivityResult(requestCode, resultCode, data);
其中fragment是要传递结果的Fragment的实例。
答案 1 :(得分:1)
使用ViewPager的父级活动:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
在ViewPager的子片段中:
@OnClick(R.id.fabNav)
public void showComposePost(View v) {
Intent intent = new Intent(getActivity(), ComposeActivity.class);
/*[...]*/
getActivity().startActivityForResult(intent,1888);
}
在同一个子片段中:
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "reqCode: " + requestCode);
Log.d(TAG, "resultCode: " + resultCode);
if (resultCode == Activity.RESULT_OK && requestCode == 1888) {
getList();
}
}