android - OnActivityResult 没有在 Activity 的 Fragment 中被调用
问题描述
我的活动流程是这样的。
在Fragment
A中,它允许用户捕获图像,并且图像将显示在Activity B
用户上进行一些编辑。
片段 A
mImageListAdapter.mAddImageClickListener = object : ImageListAdapter.AddImageClickListener {
override fun addImageClicked() {
val options = arrayOf<CharSequence>("Take Photo", "Choose From Gallery", "Cancel")
val builder = android.support.v7.app.AlertDialog.Builder(activity)
builder.setTitle("Select Option")
builder.setItems(options) { dialog, item ->
if (options[item] == "Take Photo") {
dialog.dismiss()
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, CAMERA_CAPTURE)
}
}
builder.show()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
var bitmap: Bitmap? = null
if (requestCode == CAMERA_CAPTURE && resultCode == Activity.RESULT_OK) {
val extras = data?.extras
if (extras != null) {
bitmap = extras.get("data") as Bitmap
val intent = Intent(activity, ActivityB::class.java)
intent.putExtra("bitmap", bitmap)
startActivityForResult(intent, 12)
}
} else if (requestCode == 12 && resultCode == Activity.RESULT_OK) {
longToast("It get result from Activity B")
} else {
longToast("Nothing")
}
}
在 Activity B 中,一旦单击完成按钮,编辑后的图像假设返回到 Fragment A,我希望在其中显示“ It get result from Activity B
”,但什么也没有显示!
活动 B
doneBtn.setOnClickListener {
image.buildDrawingCache()
val bitmap = image.getDrawingCache()
val resultIntent = Intent()
resultIntent.putExtra("bitmap", bitmap)
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
解决方案
作为最简单的选项之一,通过静态变量传递它
在 Fragment A 创建一个静态字段
companion object {
public var globalBitmap: Bitmap? = null
}
并在onActivityResult
方法中的片段A中将位图保存到静态变量中
...
if (requestCode == CAMERA_CAPTURE && resultCode == Activity.RESULT_OK) {
val extras = data?.extras
if (extras != null) {
globalBitmap = extras.get("data") as Bitmap
startActivityForResult(intent, 12)
}
}
...
在 Activity B 中,从 Fragment A 静态变量中读取结果位图
FragmentA.globalBitmap
推荐阅读
- c++ - 静态堆栈函数不 1) 接受第一个元素的输入 2) 在添加新元素时识别旧元素
- graphite - 从 Graphite DB 了解保留政策
- elasticsearch - 如何在 Elasticsearch 过滤脚本中使用嵌套字段
- c++ - 对没有比较器或 lambda 函数的向量进行排序?
- c - ifdef中的gcc编译函数
- c# - 从任务计划程序运行的 ClickOnce 控制台应用程序将不会更新
- vue.js - 如何在 vue js 中链接 vanilla js 资产?
- flutter - 如何在 Flutter 中从另一个屏幕接收编辑/更新的数据到主屏幕?
- javascript - nodejs主进程是否使用所有cpu内存?
- angular - AWS Cognito:当用户使用“adminSetUserPassword”启用时,应自动触发向用户发送密码的电子邮件