希望我能成功解释我的情况。
我有一个活动(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);
适配器中的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);
}
};
答案 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
结合使用。
看到这个答案:
答案 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();
}