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

问题描述 投票:-3回答:2

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

 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类!

android android-intent kotlin onactivityresult
2个回答
0
投票

正如尼基塔所说,你应该从片段调用startActivityForResult,如果你想得到碎片的结果。

我想在适配器类中调用startActivityForResult,因此我需要上下文作为Activity然后创建OnItemClick接口使您的片段实现它并将它在构造函数中传递给您的适配器。然后当用户点击项目调用接口方法时

interface OnItemClickListener{
   onClick(item:T)
}

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

}

并在你的适配器

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

1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.