4

希望我能成功地解释我的情况。

我有一个 Activity (A),它基本上是一个添加新项目的表单,只有很少的文本字段、时间和位置字段。单击设置位置按钮时,它会调用第二个 Activity (B),该 Activity (B) 具有带有自定义 ArrayAdapter 的列表视图,该 ArrayAdapter 提供有关 locactins 的建议。单击一项时(适配器类中的 OnClickListener )需要将其传递回 Activity A。

从 A 调用活动 B

Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity.class);
startActivityForResult(I, LOC_ACTIVITY_CODE);

在 Activity B 中设置适配器

Adapter = new TaskGeoSubBaseAdapter(getApplicationContext(), R.id.sugtext, result);
Adapter.setActivity(TaskGeoSetActivity.this);
lv.setAdapter(Adapter);

适配器内的 OnClick 事件

public void setActivity(Activity act) {
    parentAct = act;
}

private final OnClickListener locpicker = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Address a = items.get((Integer) v.getTag());
            Intent intent = new Intent(context, TaskAddActivity.class);
            intent.putExtra("Address", a);
            parentAct.setResult(parentAct.RESULT_OK, intent);
        }

};
4

3 回答 3

5

用这个替换你的点击处理程序。

private final OnClickListener locpicker = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Address a = items.get((Integer) v.getTag());
        Intent intent = new Intent(context, TaskAddActivity.class);
        intent.putExtra("Address", a);
        ((Activity)v.getContext()).setResult(parentAct.RESULT_OK, intent);
        ((Activity)v.getContext()).finish();
    }
}

在您的调用活动中覆盖 onActivityResult 以处理结果。OUR_REQUEST_CODE 是您调用 startActivityForResult 时发送的请求代码。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case OUR_REQUEST_CODE:
            if(resultCode == RESULT_OK) {
                //Do something useful with data
            }
            break;
    }
}
于 2015-05-17T09:08:24.727 回答
0

要将数据传回活动 A,您应该将该函数setResult与您的startActivityForResult.

看到这个答案:

https://stackoverflow.com/a/14118010/238180

于 2013-01-17T13:45:44.663 回答
0

你必须在你的activityB 上设置结果,你不需要Adapter.setActivity(TaskGeoSetActivity.this); Just this.setResult(parentAct.RESULT_OK, intent);

private final OnClickListener locpicker = new OnClickListener() {

    @Override
    public void onClick(View v) {
        ActivityB.this.setResult(...);
        finish();
    }
于 2013-01-17T13:46:00.860 回答