Android:使用适配器在活动之间传递参数

Android:使用适配器在活动之间传递参数,android,android-activity,android-arrayadapter,Android,Android Activity,Android Arrayadapter,希望我能成功地最好地解释我的处境 我有一个活动A,它基本上是一个添加新项目的表单,只有很少的文本字段、时间和位置字段。 单击setlocation按钮时,它将调用第二个活动B,该活动B具有一个带有自定义ArrayAdapter的列表视图,该视图为locactins提供建议。在适配器类中单击ClickListener上的一个项目时,需要将其传递回活动A 从A呼叫活动B Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity

希望我能成功地最好地解释我的处境

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

从A呼叫活动B

Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity.class);
startActivityForResult(I, LOC_ACTIVITY_CODE);
在活动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);
        }

};

要将数据传回活动A,应将函数setResult与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;
    }
}
看看这个答案:


您必须在活动B上设置结果,不需要适配器。setActivityTaskGeoSetActivity.this; 只有这个.setResultparentAct.RESULT\u好的,intent;:


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

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以处理结果。我们的请求代码是您在调用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;
    }
}

您好,这个点击式侦听器位于基本适配器内部。这不识别活动B。我知道activityB的setResult会将其传递回A,但如何从适配器传递?最好的regards@BenDiamantsry,这是活动B。而不是这个。活动BHI!在ActivityB.this.setResultActivityB.RESULT\u OK,intent;行的范围错误中,我没有得到ActivityB类型的封闭实例@BenDiamant哦,我以为它在活动B中,它在活动A中?Intent Intent=newintentcontext,ActivityA.class;意向书地址,a;ActivityB.this.setResultActivityB.RESULT\u确定,意图;第三行给我打电话你好,谢谢。我知道,问题是我需要在适配器类中调用setResult