Crash我可以代替onActivityResult
中的Fragment
使用什么?
我在inCreate上使用了这段代码
科特琳
photo.setOnClickListener {
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/"
startActivityForResult(intent, 0)
}
我想收到这样的结果,但是在片段中
科特琳
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 0 && resultCode == Activity.RESULT_OK && data != null) {
selectedPhotoUri = data.data
val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectedPhotoUri)
val bitmapDrawable = BitmapDrawable(bitmap)
photo.setBackgroundDrawable(bitmapDrawable)
if (selectedPhotoUri == null) return@onActivityResult
val filename = UUID.randomUUID().toString()
val ref = FirebaseStorage.getInstance().getReference("/images/$filename")
ref.putFile(selectedPhotoUri!!)
.addOnSuccessListener {
ref.downloadUrl.addOnSuccessListener {
uri = it.toString()
}
}
.addOnFailureListener {
}
}
}
答案 0 :(得分:0)
您的堆栈跟踪表明调用photo.setOnClickListener
时photo
为空。您的问题与onActivityResult
无关,只需在致电photo
之前像这样设置photo.setOnClickListener
:
photo = findViewById(R.id.photo_id);// replace photo_id with id of photo
photo.setOnClickListener {
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/"
startActivityForResult(intent, 0)
}
您说:
如果我使用Activity NOT片段,则此代码正在运行
首先,您必须从片段中调用startActivityForResult()
才能在该片段中接收其结果。
第二次调用startActivityForResult()
时先调用Activity的onActivityResult()
,然后再调用片段 BUT 的onActivityResult()
,如果您覆盖了onActivityResult()
的Activity,没有调用super.onActivityResult()
的片段onActivityResult()
不会被调用
因此,请勿从活动中覆盖onActivityResult()
,或者如果您已覆盖它,并且也希望仅在活动onActivityResult()
中调用super.onActivityResult()
来调用片段的onActivityResult()
。
如果您不能采用这种方式,则只需将代码移至片段的可选方法,然后从Activity的onActivityResult
调用该方法。