简体   繁体   English

OnActivityResult 未在 Fragment 中调用,其中意图从适配器类传递

[英]OnActivityResult not getting called in Fragment where intent pass from adapter class

So in my adapter class, I would like to allow user to capture image所以在我的适配器类中,我想允许用户捕获图像

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

I want the onActivityResult in a fragment class get called, but it doesn't.我希望片段类中的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")
                }
            }

There are no toast displayed.没有显示吐司。 How to solve ?怎么解决 ?

I realize the onActivityResult works if I put in one of my Activity class, but I want to put at Fragment class !我意识到如果我放入我的 Activity 类之一, onActivityResult起作用,但我想放入 Fragment 类!

If you want fragment's onActivityResult() to be called, call startActivityForResult(intent, id) from fragment, not from activity (try pass fragment reference to adapter).如果您希望调用片段的onActivityResult() ,请从片段而不是从活动中调用startActivityForResult(intent, id) (尝试将片段引用传递给适配器)。

Also, make sure you haven't overridden activity's onActivityResult() or call super.onActivityResult() in activity.另外,请确保您没有覆盖活动的onActivityResult()或在活动中调用super.onActivityResult()

as nikita said you should call startActivityForResult from fragment if you want to get results in fragment.正如 nikita 所说,如果你想在片段中获得结果,你应该从片段中调用startActivityForResult

I want to call startActivityForResult in adapter class, so I would need context as Activity Then create OnItemClick interface make your fragment implement it and pass it in a constructor to your Adapter.我想在适配器类中调用 startActivityForResult,所以我需要上下文作为 Activity 然后创建 OnItemClick 接口让你的片段实现它并将它的传递给你的适配器的构造函数。 Then when a user clicks on an item call interface method那么当用户点击某个item时调用接口方法

interface OnItemClickListener{
   onClick(item:T)
}

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

}

And in your adapter在你的适配器中

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM