我有很多活动(比如活动 A , B , C )调用单个活动(比如活动 D )获得结果(startActivityForResult(..)
)。
但是在被调用者设置结果并结束之前,想根据被调用者活动中的调用者活动(活动 D )做一些事情。
我想要做的任务需要使用调用活动的数据变量,所以现在我打算传递一个类似于此的回调类:
public interface myCallBack implements Seriabizable{
public void myMethod();
}
从每个调用者到被调用者启动活动;
intent.putExtra(CALL_BACK_OBJECT_KEY, new myCallBack(){
@Override
public void myMethod(){
//code that uses instance variables of caller class
}
});
当然回调是可串行化的。
myCallback = getIntent().getSerializableExtra(CALL_BACK_OBJECT_KEY);
现在,被叫方活动(活动 D )将执行以下任务:
myCallback.myMethod();
但这是正确的做法吗?跨越活动传递回调类是否合适?还有哪些其他选择?
或者有没有办法直接调用调用者活动的方法?在这种情况下,我将强制调用者活动实现MyCallBack
接口。
NB:
我不想将调用者所需的数据传递给被调用者的原因是,任务所需的数据对于每个调用者活动而言都是完全不同的,并且还有一些时间很大。所以我不要用这些数据变量搞乱被调用者的活动。
答案 0 :(得分:0)
你的建议可能有用。然而,它看起来很复杂,不是一个好习惯。
如果您只想传递活动数据,为什么不将intent.putExtra
与您希望通过活动传递的数据一起使用?
如果您要传递的数据太大或太复杂,无法像这样传递,也许您应该以另一种方式实现您的应用程序。例如,您可以使用Service
。您将拥有三项服务(每项活动一个,或用例)。这些服务将实现同一类的通用接口或herit。您的呼叫行为(A,B或C)将启动相应的服务,服务将存储数据。当您启动活动D时,此活动将与服务绑定。然后,她将能够完全访问服务中的所有数据或对象。