[英]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.