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