OnActivityResult не вызывается во фрагменте, где намерение передается из класса адаптера - PullRequest
0 голосов
/ 14 февраля 2019

Итак, в моем классе адаптеров я хотел бы разрешить пользователю захватывать изображение

 fun dispatchTakePictureIntent() {
        try {
            val captureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            (context as Activity).startActivityForResult(captureIntent, 1)
        } catch (e: ActivityNotFoundException) {
            e.printStackTrace()
        }
    }

    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        Log.d("MyAdapter", "onActivityResult")
    }

Я хочу, чтобы вызывался onActivityResult в классе фрагмента, но это не так.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        val imageListAdapter : ImageListAdapter?=null
        imageListAdapter?.onActivityResult(requestCode, resultCode,data)
                if (requestCode == 1 && resultCode == Activity.RESULT_OK) 
                {
                    longToast("called")
                }else{
                    longToast("no")
                }
            }

Тосты не отображаются.Как решить?

Я понимаю, что onActivityResult работает, если я добавляю один из моих классов Activity, но я хочу поместить в класс Fragment!

Ответы [ 2 ]

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

, как сказал Никита, вы должны вызывать startActivityForResult из фрагмента, если вы хотите получить результаты во фрагменте.

Я хочу вызвать startActivityForResult в классе адаптера, поэтому мне нужен контекст как Activity. Затем создайте интерфейс OnItemClick, чтобы ваш фрагмент реализовал его и передал в конструкторе вашему Adapter.Затем, когда пользователь нажимает на метод интерфейса вызова элемента

interface OnItemClickListener{
   onClick(item:T)
}

Foo: Fragment, OnItemClickListener{
...
    onClick(item:T){
        startActivityForResult...
    }
...
    initAdapter(){
        Adapter(listener=this,...)
    }

}

И в вашем адаптере

...
itemView.setOnClickListener{
    listener.onClick(item)
}
0 голосов
/ 14 февраля 2019

Если вы хотите, чтобы фрагмент onActivityResult() вызывался, вызывайте startActivityForResult(intent, id) из фрагмента, а не из действия (попробуйте передать ссылку на фрагмент в адаптер).

Также убедитесь, что вы не переопределили onActivityResult() действия или не наберите super.onActivityResult() в действии.

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