安卓:通过适配器在活动之间传递参数

4
希望我能最好地解释我的情况。 我有一个活动(A),基本上是一个表单,用于添加新项目,具有几个文本字段,时间和位置字段。 当点击setlocation按钮时,它会调用第二个活动(B),该活动具有带有自定义ArrayAdapter的列表视图,为位置提供建议。当单击其中一个项目(位于适配器类内部的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);
        }

};
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;
    }
}

0
你需要在你的B活动中设置结果,不需要使用Adapter.setActivity(TaskGeoSetActivity.this)。只需使用this.setResult(parentAct.RESULT_OK, intent)即可:
private final OnClickListener locpicker = new OnClickListener() {

    @Override
    public void onClick(View v) {
        ActivityB.this.setResult(...);
        finish();
    }

您好,这个点击监听器位于基础适配器内部。 "This." 无法识别 ActivityB。我知道从 activityB 设置 setResult 将把它传回 A,但我该如何从适配器中传递它呢? 此致敬礼 - Ben Diamant
@BenDiamant 抱歉,应该是ActivityB.this,而不是this.ActivityB。 - AMerle
你好!我在以下代码行收到了"No enclosing instance of the type ActivityB is accessible in scope"的错误提示: ActivityB.this.setResult(ActivityB.RESULT_OK, intent); - Ben Diamant
@BenDiamant 噢,我以为它在活动B中,原来是在活动A中? - AMerle
Intent intent = new Intent(context, ActivityA.class); intent.putExtra("Address", a); ActivityB.this.setResult(ActivityB.RESULT_OK, intent);第三行出现错误。 - Ben Diamant

0

你好,谢谢。我知道,问题是我需要在适配器类内调用setResult。 - Ben Diamant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接