我的项目结构是一个activity中包含两个fragment,每个fragment中有button去开启新活动,也有recycleview里的button去开启。
实现了以后发现fragmen中的button开启的回调在fragment中的onActivityResult中接收,recycleview的在activity中接收的。让我很奇怪。
那么来比较一下集中开启的方式:
首先,在adpter中是无法直接startactivity的,因为需要一个上下文
那么,获取这个context
要么①在初始化adapter时候我们把activity传过来
要么②在初始化adapter时候我们把fragment传过来
要么③在onCreateViewHolder的时候把用viewGroup的getContext获取上下文,获取到的实际是那个activity。
如果是存储的为Context类,再强转成Activity类就可以调用startActivityForResult了。
那么问题来了,onActivityResult在哪回调?
这要看你调用的那个context是个啥,①③获得的都是activity,②如果传的是fragment实例,不是context的话,是在fragment里面回调的。
并且,fragment中调用的startActivityForResult是Fragment类中的,和Activity类中的不是同一处方法,上下文也不同,自然就会在两个地方回调了。
所以,建议传实例,就不传context了,传了还要再转,根据需求选择传哪种,传谁,能精确找到回调位置。