簡體   English   中英

使用活動在android中實現回調

[英]implementing a callback in android with Activities

我正在為 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
   }
}

我會這樣做:

創建接口:

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
    protected void onDestroy() {
        myReceiver = null;
    }


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

}

調用它只需使用這個:

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

無需創建活動實例。

在這種情況下,我還建議您使用 startActivityForResult。

希望這可以幫助。

為此,我使用單例方法。

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 方法。

你可以做一件事。 在活動開始時創建庫的對象,並將活動的引用傳遞給該對象實例化。 並實現該接口回調到活動。 在您的庫內部,您將有活動引用轉換為您的接口回調和調用接口方法,這將使您在活動級別進行回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM