OnActivityResult не вызывается во фрагменте из действия - PullRequest
0 голосов
/ 27 февраля 2019

Мой поток действий выглядит следующим образом.

В 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")
        }
    }

В Деятельности B после нажатия кнопки «Готово» отредактированное изображение предполагается вернуться во Фрагмент 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()
        }

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Смотрите, я быстро попробовал, добавил точку останова и получил обратный вызов во фрагменте.

enter image description here использование контекст

 val builder = android.support.v7.app.AlertDialog.Builder(context)

вместо активность

 val builder = android.support.v7.app.AlertDialog.Builder(activity)
0 голосов
/ 27 февраля 2019

Как один из простейших вариантов передать его через статическую переменную

Во Фрагменте A создайте статическое поле

    companion object {
        public var globalBitmap: Bitmap? = null
    }

, а во Фрагменте A в методе onActivityResult сохранить растровое изображение встатическая переменная типа

...
    if (requestCode == CAMERA_CAPTURE && resultCode == Activity.RESULT_OK) {
                val extras = data?.extras
                if (extras != null) {
                    globalBitmap = extras.get("data") as Bitmap

                    startActivityForResult(intent, 12)
                }
            }
...

В Деятельности B считывает растровое изображение результата из фрагмента Статическая переменная типа

FragmentA.globalBitmap
...