Что я могу использовать вместо onActivityResult во фрагменте? - PullRequest
0 голосов
/ 03 сентября 2018

Сбой Что я могу использовать вместо 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 {
                }

    }
}

1 Ответ

0 голосов
/ 04 сентября 2018

ваша трассировка стека говорит, что при вызове 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() сначала вызывается onActivityResult() Деятельности, затем onActivityResult() фрагмента НО , если вы переопределили onActivityResult() действия и не вызывали super.onActivityResult() onActivityResult() фрагментов не будет называться

Таким образом, не переопределяйте onActivityResult() из действия или если вы переопределили его, а также хотите, чтобы фрагмент onActivityResult() был вызван, просто вызовите super.onActivityResult() в onActivityResult() действия.


Если вы не можете пойти по этому пути, вы можете просто переместить свой код в необязательный метод фрагмента, а затем вызвать этот метод из onActivityResult из Activity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...