onActivityResult 不会从 viewPager 片段调用
Posted
技术标签:
【中文标题】onActivityResult 不会从 viewPager 片段调用【英文标题】:onActivityResult doesn't call from viewPager fragment 【发布时间】:2015-11-16 08:21:08 【问题描述】:您好,我在主片段中使用带有片段的 viewPager。 我正在尝试从图库或相机中获取图像到位图,但是在选择照片和 startActivityForResult 后它没有捕获 onActivityResult...
这是我调用 startActivityForResult 的方式:
private void setAvatarDialog()
final CharSequence[] options = "Choose from Gallery", "Take Photo" ;
String title = getString(R.string.alertDialog_editProfile_updateAvatar_title);
String negative = getString(R.string.alertDialog_editProfile_updateAvatar_negative);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setItems(options, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
if (options[which].equals(options[0]))
mIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
mIntent.setType("image/*");
startActivityForResult(Intent.createChooser(mIntent, "Select File"), SELECT_FILE);
else if (options[which].equals(options[1]))
mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(mIntent, REQUEST_CAMERA);
dialog.dismiss();
);
builder.setNegativeButton(negative, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
dialog.dismiss();
);
builder.show();
这是我的 onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
if (requestCode == REQUEST_CAMERA)
resultCamera(data);
else if (requestCode == SELECT_FILE)
resultGallery(data);
有什么想法吗?
【问题讨论】:
您是否确保您的活动返回结果?代码未显示.. 你的意思是我需要在activity中覆盖onActivity结果? 【参考方案1】:当我有一个包含具有 3 个不同片段(子)的 ViewPager 并且其中一个子片段开始活动的 ParentFragment 时,此解决方案对我有用。
您可以使用getParentFragment().startActivityForResult
在孩子中打开活动
一旦该活动完成,它将在 ParentFragment 中调用 onActivityResult
,我在其中重写方法来调用 3 个孩子的 onActivityResult
中的每一个@
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getChildFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
【讨论】:
【参考方案2】:您需要确保为结果而启动的活动也返回结果。例如,在您的图像捕获Activity
中,Activity
结束的地方,包括
Intent intent = new Intent();
//intent.putExtra
intent.putExtra(getString(R.string.MY_RESULT_CODE), data);
setResult(RESULT_OK, intent);
finish(); //Ends the current activity.
//After this, onActivityResult of the activity that started this one will be called
【讨论】:
我正在使用本教程从图库和相机中获取图像。 theappguruz.com/blog/… 当我在一个片段中使用它时 - 它可以工作,但是当有带有片段的 viewPager 时它不工作【参考方案3】:查看https://***.com/a/24303360/3207339
都表示ViewPager中的Fragment有问题,我也有同样的问题。
【讨论】:
【参考方案4】:这对我有用。
// Parent Fragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
getTargetFragment().onActivityResult(requestCode, resultCode, data);
// In Child Fragment
public void pick()
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Note followings two lines.
getParentFragment().startActivityForResult(Intent.createChooser(intent, "Select"), 1);
getParentFragment().setTargetFragment(this,1);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Log.d("DEBUG","ONE1");
if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null)
Log.d("DEBUG","TWO");
Uri uri = data.getData();
try
Log.d("DEBUG","THREE");
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), uri);
// Log.d(TAG, String.valueOf(bitmap));
Log.d("DEBUG","FOUR");
ImageView imageView = (ImageView) yourLayoutView.findViewById(R.id.yourImageView);
Log.d("DEBUG","FIVE");
imageView.setImageBitmap(bitmap);
Log.d("DEBUG", "SIX");
catch (Exception e)
e.printStackTrace();
【讨论】:
以上是关于onActivityResult 不会从 viewPager 片段调用的主要内容,如果未能解决你的问题,请参考以下文章
从Fragment调用startActivityForResult不会调用onActivityResult
从 Fragment 开始ActivityForResult() 并完成子 Activity,不会在 Fragment 中调用 onActivityResult()
Android Photo Gallery不会从OnActivityResult中的数据返回正确的Uri
[从Google Play商店安装应用时的onActivityResult回调
ActivityResultCallback 函数 onActivityResult 不会在某些设备上触发(Android Studio / Java)