在Android中使用Activities实现回调

时间:2017-11-13 10:29:02

标签: android android-activity callback

我正在为Android开发一个库并有以下场景,我想要回复MainActivity。我怎么能这样做?我尝试过回调但不能,因为我不能自己创建Activity类的对象。有没有其他方法来实现它?在AsyncTaskListener实现中我正在做一些网络操作。我无法使用startActivityForResult,因为它不符合我的库规范。

public class MainActivity extends AppCompatActivity implements MyReceiver{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    MyServiceImpl b = new MyServiceImpl();
    String request = "123";
    b.request(this,request);
    }

    @Override
    public void completed(String result) {        
        Log.d("MainActivity","Result - "+result);
    }
}

public class MyServiceImpl{

   public void request(Activity appActivity,String req){
        Intent intent = new Intent(appActivity, ActivityB.class);
        appActivity.startActivity(intent);
   } 
}

public class ActivityB extends AppCompatActivity imnplements AsyncTaskListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // shows UI 
        // network operations
    }

   @Override
   public void taskFinish(String response) {
     //  my result comes here
     //  now  i want this result to propagated to MainActiviy
   }
}

3 个答案:

答案 0 :(得分:2)

为此我使用Singleton方法。

class ActivityCommunication {
private static ActivityCommunication instance = null;
private MainCallback mainCallback = null;

private ActivityCommunication() {
}

public static ActivityCommunication getInstance() {
    if (instance == null) {
        instance = new ActivityCommunication();
    }
    return instance;
}

public void setMainCallBackListener(MainCallback mainCallback) {
    this.mainCallback = mainCallback;
}

public void sendDataToMainActivity(Data data) {
    if (mainCallback != null) {
        mainCallback.onMainCallBack(data);
    }
}

public interface MainCallback {
    void onMainCallBack(Data data);
}
}

在MainActivity上设置监听器

 ActivityCommunication.getInstance().setMainCallBackListener();

从ActivityB开始,在需要时发送数据

 ActivityCommunication.getInstance().sendDataToMainActivity(myData);

然后将调用已实现的onMainCallBack方法。

答案 1 :(得分:0)

你可以做一件事。在活动开始时创建库的对象,并将活动的引用传递给该对象实例。并实现该接口回调活动。在您的库内部,您将有一个活动参考强制转换为您的接口回调和调用接口方法,它将在您的活动级别回调。

答案 2 :(得分:0)

我会这样做:

创建一个界面:

public interface MyReceiver {
  public void onReceive();
}

在你的活动中:

public class MyActivity implements MyReceiver{

public static MyReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_new_booking);        
    super.onCreate(savedInstanceState);
    myReceiver = this;
    }

    @Override
    public void onReceive(){
       //Implement your code here or send objects in the parameters
    }

}

要调用它只需使用:

if(MyActivity.myReceiver!=null){
  MyActivity.myReceiver.onReceive();
}

无需创建活动实例。

在这种情况下,我还建议您使用startActivityForResult。

希望这有帮助。