当前位置: 代码迷 >> Android >> 从被叫方活动中调用主叫方活动
  详细解决方案

从被叫方活动中调用主叫方活动

热度:104   发布时间:2023-08-04 10:59:19.0

我有许多活动(例如活动ABC ),它们为结果( startActivityForResult(..) )调用单个活动(例如活动D )。

但是要在被叫方设置结果并完成之前根据被叫方活动(活动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接口。


注意:
我不想将需要的数据从调用者传递到被调用者的原因是,对于每个调用者活动,任务所需的数据是完全不同的,而且时间还很长。 因此,我不会用这些数据变量弄乱被调用者的活动。

您的建议可能有效。 但是,它看起来很复杂,不是一个好习惯。

如果您只是想传递数据跨活动,为什么不将intent.putExtra与要传递数据的活动一起使用?

如果您要传递的数据太大或太复杂而无法像这样传递,也许您应该以另一种方式实现应用程序。 例如,您可以使用Service 您将拥有三项服务(每个活动或用例一个)。 这些服务将实现同一类的通用接口或继承。 您的呼叫活动(A,B或C)将启动适当的服务,并且该服务将存储数据。 当您启动活动D时,该活动将与服务绑定。 然后,她将能够完全访问服务中的所有数据或对象。

  相关解决方案