[英]How to launch activity from non-activity class and receive the onActivityResult() on the activity class
[英]How to use onActivityResult method from a non-activity class to get the resuts
我有一個擴展CursorAdapter的類,所以我使用((Activity) context).startActivityForResult
。 但是如何使用onActivityResult? 非常感謝。
您可以選擇observer
模式。
public interface ActivityObserver {
void onActivityResult(int requestCode, int resultCode, Intent data);
}
public class MyActivity extends Activity {
private List<ActivityObserver> observers = new ArrayList<ActivityObserver>();
public void attach(ActivityObserver observer){
observers.add(observer);
}
public void detach(ActivityObserver observer){
observers.remove(observer);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (ActivityObserver observer : observers) {
observer.onActivityResult(requestCode, resultCode, data);
}
}
}
當然,這里您需要在適配器中實現ActivityObserver
並將其附加。
盡管如此,請考慮使用Androjeta框架(由我維護)。 它帶有許多功能,包括Observer
,可以在您的情況下使用:
public class OnActivityResultEvent {
int requestCode;
int resultCode;
Intent data;
public OnActivityResultEvent(int requestCode, int resultCode, Intent data) {
this.requestCode = requestCode;
this.resultCode = resultCode;
this.data = data;
}
}
public class MyActivity extends Activity {
@Subject
Observers<OnActivityResultEvent> observers;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
observers.notify(new OnActivityResultEvent(requestCode, resultCode, data));
}
}
public class MyAdapter extends ArrayAdapter{
@Observe(MyActivity.class)
void onActivityResultEvent(OnActivityResultEvent event) {
}
}
請點擊鏈接獲取詳細信息。
在您的活動中覆蓋onActivityResult()
。
請參閱: http : //developer.android.com/training/basics/intents/result.html
如果您想要其他通知方式,請嘗試使用LocalBroadcastManager和BroadcastReceiver ,如果發送者和接收者都是您自己的代碼。
如果您依賴外部代碼或應用程序,則必須使用活動方式並以此為基礎進行構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.