【发布时间】:2015-10-30 18:25:24
【问题描述】:
我遇到了以下问题,
我的项目有以下结构,
-
有一个父activity,里面会承载fragments(共3个),布局如下图,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/processContent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/detSaveNContBtn" /> </RelativeLayout> -
在活动启动时,第一个fragment会被加载,即framelayout(processContent)会被fragment1替换,Fragment1有一个按钮,点击那个按钮,processContent会被Fragment2替换,同理Fragment3 的加载方式。
在 Fragment3 中,我必须上传多张照片,这些照片可以是用相机拍摄的,也可以是来自图库的。
所以我使用选择器意图来显示选择,相同的代码如下所示,
final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator);
root.mkdirs();
final String fname = "img_" + System.currentTimeMillis();
final File sdImageMainDirectory = new File(root, fname);
outputFileUri = Uri.fromFile(sdImageMainDirectory);
// Camera.
SignUpProccessActivity activity = (SignUpProccessActivity) getActivity();
final List<Intent> cameraIntents = new ArrayList<Intent>();
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = activity.getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
Uri fileUri = Uri.fromFile(sdImageMainDirectory);
activity.setCapturedImageURI(fileUri);
activity.setCurrentPhotoPath(fileUri.getPath());
for(ResolveInfo res : listCam) {
final String packageName = res.activityInfo.packageName;
final Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
intent.setPackage(packageName);
intent.putExtra(MediaStore.EXTRA_OUTPUT, activity.getCapturedImageURI());
cameraIntents.add(intent);
}
// Filesystem.
final Intent galleryIntent = new Intent();
galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
// Chooser of filesystem options.
final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");
// Add the camera options.
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));
startActivityForResult(chooserIntent, 1888);
当我从图库中选择照片时,一切都很好,但是当我尝试从相机中获取图像时,活动的 oncreate 被调用,因此将再次显示 Fragment1。
我知道 oncreate 会在调用相机时被调用,因为方向从this 问题中发生变化,正如我添加属性的问题中所回答的那样,
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
但还是同样的问题。
我在这方面做错了什么。
对此的任何帮助将不胜感激。
更新:我通过从选择器中删除图库进行了检查,即仅在单击按钮后调用相机意图,如果只有相机在那里,则片段的 onActivityResult 被调用。
【问题讨论】:
-
您应该保存活动状态并在调用 onCreate 时再次恢复,而不是强制定向。见developer.android.com/training/basics/activity-lifecycle/…
-
@adelphus:我已根据您的评论更改了代码。但仍然是相同的行为
标签: android android-fragments android-intent