如何使用非活动类中的onActivityResult方法来获取resuts

时间:2016-05-09 16:12:04

标签: java android android-activity

我有一个扩展CursorAdapter的类,因此我使用((Activity) context).startActivityForResult。但是我如何使用onActivityResult?非常感谢。

2 个答案:

答案 0 :(得分:1)

作为一种选择,你可以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) {
    }
}

请点击链接了解详情。

答案 1 :(得分:0)

在您的活动中覆盖onActivityResult()

请参阅:http://developer.android.com/training/basics/intents/result.html

如果您需要其他通知方式,请尝试LocalBroadcastManagerBroadcastReceiver,如果发件人和收件人都是您自己的代码。

如果您依赖外部代码或应用程序,则必须使用activity-way并围绕它进行构建。