- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 startActivityForResult()
从相机捕捉图像。在使用开发人员选项“不保留 Activity ”进行测试时,我注意到我的 View 状态正在 onViewStateRestored
中正确恢复,但在调用 onActivityResult
之前再次丢失.看起来正在创建同一 fragment 的第二个实例;有两次调用 onCreate
,一次调用有效的 savedInstanceState
,另一次调用 savedInstanceState == null
。第一个永远不会到达 onResume
。
这是我在日志中看到的:
E/CaptureFragment﹕ fireTakePictureIntent: tempPhotoPath: /storage/emulated/0/Pictures/JPEG_2014-10-15 23.19.45.jpg
E/CaptureFragment﹕ startActivityForResult: tempPhotoPath: /storage/emulated/0/Pictures/JPEG_2014-10-15 23.19.45.jpg
I/am_on_paused_called﹕ [0,com.chimbori.galapagos.views.capture.CaptureActivity]
E/CaptureFragment﹕ onSaveInstanceState: tempPhotoPath: /storage/emulated/0/Pictures/JPEG_2014-10-15 23.19.45.jpg
E/CaptureFragment﹕ onCreate: tempPhotoPath: /storage/emulated/0/Pictures/JPEG_2014-10-15 23.19.45.jpg
E/CaptureFragment﹕ onViewStateRestored: tempPhotoPath: /storage/emulated/0/Pictures/JPEG_2014-10-15 23.19.45.jpg
E/CaptureFragment﹕ onCreate: tempPhotoPath: null
E/CaptureFragment﹕ onStart
E/CaptureFragment﹕ onActivityResult : tempPhotoPath: null
E/CaptureFragment﹕ onResume: tempPhotoPath: null
I/am_on_resume_called﹕ [0,com.chimbori.galapagos.views.capture.CaptureActivity]
方法很简单:
private String tempPhotoPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.containsKey(IntentConstants.EXTRA_PHOTO_FILE)) {
tempPhotoPath = savedInstanceState.getString(IntentConstants.EXTRA_PHOTO_FILE);
}
Log.e(TAG, "onCreate: tempPhotoPath: " + tempPhotoPath);
}
private void fireTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
tempPhotoPath = FilePaths.createTempPhotoPath().getAbsolutePath();
Log.e(TAG, "fireTakePictureIntent: tempPhotoPath: " + tempPhotoPath);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(tempPhotoPath)));
Log.e(TAG, "startActivityForResult: tempPhotoPath: " + tempPhotoPath);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (tempPhotoPath != null) {
Log.e(TAG, "onSaveInstanceState: tempPhotoPath: " + tempPhotoPath);
outState.putString(IntentConstants.EXTRA_PHOTO_FILE, tempPhotoPath);
}
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.containsKey(IntentConstants.EXTRA_PHOTO_FILE)) {
tempPhotoPath = savedInstanceState.getString(IntentConstants.EXTRA_PHOTO_FILE);
Log.e(TAG, "onViewStateRestored: tempPhotoPath: " + tempPhotoPath);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
Log.e(TAG, "onActivityResult : tempPhotoPath: " + tempPhotoPath);
}
}
为什么它会在 onViewStateRestored
上正确恢复,但在 onActivityResult
及以后返回 null?有什么想法吗?
最佳答案
好的,我明白了。我在 CaptureActivity
中重新创建了 CaptureFragment
,即使我收到的是非空 savedInstanceState
。这就解释了为什么要创建两个 fragment 而不是一个 fragment 。
修复前:CaptureActivity.onCreate
CaptureFragment captureFragment = new CaptureFragment();
getFragmentManager().beginTransaction()
.replace(R.id.activity_capture_content_frame, captureFragment,
CaptureFragment.class.getCanonicalName())
.commit();
固定:
CaptureFragment captureFragment = (savedInstanceState != null)
? (CaptureFragment) getFragmentManager().findFragmentByTag(CaptureFragment.class.getCanonicalName())
: new CaptureFragment();
getFragmentManager().beginTransaction()
.replace(R.id.activity_capture_content_frame, captureFragment,
CaptureFragment.class.getCanonicalName())
.commit();
关于android - 查看状态在 onActivityResult 和 onResume 之间丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26397340/
哪个更好,为什么? 这个: @Override public void onActivityResult(int requestCode, int resultCode, Intent intent)
在我的 fragment 中,我已经启动了用于照片捕获的 startActivityforresult Intent 。我已经覆盖了 fragment 类中的 onActivityResult 回调方
我已经实现了 Facebook 集成,并且在初始化部分工作正常,即使 Facebook APPID 也适用于应用程序。 让我更详细地解释一下:我已在 onCreate() 中添加并初始化 Facebo
我有代码可以让我从计算器中获取值并进一步使用它: //-----------------This section creates the keypad functionality for (int o
我陷入了一种情况,根据我的应用程序图表流程描述如下: 假设我在 Activity A 上,在单击按钮时,我从图库中选择图像,选择后,我将移动到 Activity B(它在内部来自 onActivity
我有一项 Activity 要求启用蓝牙和发现模式。 请求被正确执行并被 onactivityresult() 接收. 问题出在发现请求中。 如果我点击拒绝,那么 RESULT_CANCELED正确获
所以我尝试显示相机拍摄的图像,并希望稍后通过套接字发送它,但我注意到 onActivityResult() 方法没有被调用,现在导致了进一步的问题。我使用 RESULT_OK,但检查其值,使其不是负值
我的 MainActivity.java 中有一个类用作接口(interface): public class prova{ prova(){ } @JavascriptIn
我尝试通过启动 Intent 来使用 startActivityForResult 从照片库中进行选择并覆盖 onActivityResult 来获取图像。我不知道为什么,但是当我选择图像并尝试将其绘
每当我完成“ViewEvent” Activity 时,在“HomeFragment”中调用 onActivityResult() 时遇到问题。ViewEvents Activity 从适配器启动。
我有一个选择图像的 Intent (我在 fragment 中调用它): Intent intent = new Intent(Intent.ACTION_GET_CONTENT); int
我有一个 RecyclerView,其中的项目包含一个使用 startActivityForResult 启动 Activity 的按钮。 onClick 方法是在适配器内部实现的,并且在从新 Act
我有以下代码,它应该使用服务记录设备屏幕。 问题是,要使用它,我需要使用如下调用:startActivityForResult/onActivityResult,以获得能够录制屏幕的权限。 但是在 A
我有三项 Activity ,A、B 和 C(代码如下)。 A 使用 startActivityforResult 调用 B,并覆盖 onActivityResult,B 也使用 Activityfo
我有一个 Activity 1,它向 Activity 2 发送 Intent ,如下所示: Activity 1 periodDatetv.setOnClickListener(new OnClic
我正在尝试将其与我的应用程序集成:Capture Image from Camera and Display in Activity 当我打开 Activity 时,我完全使用了作者所写的内容,但出现
我有一个 MainActivity,它有两个 TextView。用户可以选择启动另一个 Activity 并从 ListView 中选择数据来填充这些 TextView。我的主要 Activity 有
这个问题在这里已经有了答案: How to manage startActivityForResult on Android (14 个回答) 3年前关闭。 请写下答案 如何在按钮单击时调用 frag
我怎么知道这个主题有很好的记录,我已经阅读了很多关于那个问题的文章,但我仍然遇到以下问题:当我用我的应用拍照并点击“验证”按钮时,没有任何反应。我正在做的事情的目的是:传递给 onActivityRe
从第一个 Activity 我想去第二个,然后从第二个到第三个。在第三个activity中,我想在EditText中输入姓名,然后按下按钮后,转到第一个activity,同时发送在第三项 Ac
我是一名优秀的程序员,十分优秀!