Sha*_*esh 2 android callback android-activity
我正在为 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
}
}
Run Code Online (Sandbox Code Playgroud)
我会这样做:
创建一个接口:
public interface MyReceiver {
public void onReceive();
}
Run Code Online (Sandbox Code Playgroud)
在您的活动中:
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
protected void onDestroy() {
myReceiver = null;
}
@Override
public void onReceive(){
//Implement your code here or send objects in the parameters
}
}
Run Code Online (Sandbox Code Playgroud)
要调用它只需使用这个:
if(MyActivity.myReceiver!=null){
MyActivity.myReceiver.onReceive();
}
Run Code Online (Sandbox Code Playgroud)
无需创建活动实例。
在这种情况下,我还建议您使用 startActivityForResult。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2869 次 |
| 最近记录: |