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

Ben*_*ant 4 android android-arrayadapter android-activity

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

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

从A调用活动B.

Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity.class);
startActivityForResult(I, LOC_ACTIVITY_CODE);
Run Code Online (Sandbox Code Playgroud)

在活动B中设置适配器

Adapter = new TaskGeoSubBaseAdapter(getApplicationContext(), R.id.sugtext, result);
Adapter.setActivity(TaskGeoSetActivity.this);
lv.setAdapter(Adapter);
Run Code Online (Sandbox Code Playgroud)

适配器中的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);
        }

};
Run Code Online (Sandbox Code Playgroud)

maj*_*ibu 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的调用活动中重写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;
    }
}
Run Code Online (Sandbox Code Playgroud)