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

时间:2013-01-17 13:43:13

标签: android android-activity android-arrayadapter

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

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

适配器中的O​​nClick事件

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 个答案:

答案 0 :(得分:5)

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

genderRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (checkedId == R.id.i_dont_like_radiobutton) {
                //Do some actions
            } else if (checkedId == R.id.i_like_radiobutton){

            }
        }
    });

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

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

答案 1 :(得分:0)

要将数据传回活动A,您应该将setResult功能与startActivityForResult结合使用。

看到这个答案:

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

答案 2 :(得分:0)

您必须在activity 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();
    }