在 android 中使用 Activity 实现回调

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)

Sar*_*dhi 5

我会这样做:

创建一个接口:

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。

希望这可以帮助。