我正在为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
}
}
答案 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。
希望这有帮助。