从适配器类传递意图的Fragment中未调用OnActivityResult

时间:2019-02-14 08:24:34

标签: android android-intent kotlin onactivityresult

因此,在我的适配器类中,我想允许用户捕获图像

 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 :(得分:1)

如果要调用片段的onActivityResult(),请从片段而不是从活动调用startActivityForResult(intent, id)(尝试将片段引用传递给适配器)。

另外,请确保您没有覆盖活动的onActivityResult()或在活动中调用super.onActivityResult()

答案 1 :(得分:0)

如nikita所说,如果要获取片段中的结果,应从片段中调用startActivityForResult

  

我想在适配器类中调用startActivityForResult,所以我会   需要上下文作为活动   然后创建OnItemClick接口,使您的片段实现它,并将其在构造函​​数中传递给适配器。然后,当用户单击项目调用界面方法

interface OnItemClickListener{
   onClick(item:T)
}

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

}

在您的适配器中

...
itemView.setOnClickListener{
    listener.onClick(item)
}