我有一个奇怪的问题。
我在我的代码中使用嵌套片段,(4级)
主页 - >服务 - > ServiceDetails - >上传
在最后一个片段(Upload Fragment)中我想从图库或相机中选择图像,所以我编写了以下代码来选择图像:
switch (which) {
case galleryItem:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, “Select Album”,
Home.GALLERY_REQUEST);
break;
case cameraItem:
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,
Home.CAMERA_REQUEST);
break;
并且每件事都没问题。
我可以使用以下代码从我片段的onActivityResult
中的所选图片中获取URI:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == Home.GALLERY_REQUEST) {
Uri selectedImageUri = data.getData();
} else if (requestCode == Home.CAMERA_REQUEST) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri cameraUri = getImageUri(
getActivity().getApplicationContext(), photo);
}
}
}
问题
如果我打开我的相册并滚动(查看所有缩略图),在选择我在片段中调用的图片onActivityResult
后,片段再也不可见了Home
片段(第一片段)在我的应用中可见。
但如果我打开相册(通过startActivityForResult)并立即选择照片,一切都会好的。
我对相机没有任何问题。
我搜索了很多,但没有找到任何有用的数据, 如果你想看到我的代码的任何部分告诉我。 我没有得到任何崩溃只是我失去了我的最后一个片段。 提前谢谢。
答案 0 :(得分:1)
我的问题已通过更改
解决了 Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, “Select Album”,
Home.GALLERY_REQUEST);
到:
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, Home.GALLERY_REQUEST);
我不知道为什么,但是如果有人知道Intent.createChooser
开始意图和通常打电话告诉我之间有什么不同,谢谢
答案 1 :(得分:0)
从fragment到onActivityResult函数的显式调用如下
在Parent Activity类中,覆盖onActivityResult()方法,甚至在Fragment Class中覆盖它,并调用以下代码。
在父类中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}
在儿童班:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//in fragment class callback
}