我使用startActivityForResult方法启动了名为CarrierSelectActivity的Activity。并且该活动具有一个ListView,该ListView绑定到CarrierSelectListAdapter。
我认为可以使用context.setResult(intent);来解决。但是上下文没有setResult()方法
这是CarrierSelectListAdapter中的getView()。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "listview_item" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_select_carriers, null);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
ConstraintLayout layout = convertView.findViewById(R.id.item_select_carrier);
ImageView logo = convertView.findViewById(R.id.item_select_carriers_logo);
TextView name = convertView.findViewById(R.id.item_select_carriers_carrierName);
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
Carrier carrier = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
logo.setImageDrawable(context.getDrawable(context.getResources().getIdentifier(carrier.getLogo(), "drawable", context.getPackageName())));
name.setText(carrier.getName());
layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("carrierName",);
intent.putExtra("code");
context.set //HERE!!!!!!!!!!!!
}
});
return convertView;
}
答案 0 :(得分:1)
setResult()
是Activity
而非Context
的方法。有两种获取活动的方法。
通常,ListAdapter是Activity的内部类,因此它可以访问Activity.this
。然后,您可以呼叫Activity.this.setResult(...)
。因此,在您的情况下,CarrierSelectListAdapter可以是CarrierSelectActivity的内部类,而您的onClickListener可以调用CarrierSelectActivity.this.setResult(...)
。
或者,您可以将活动传递给CarrierSelectListAdapter的构造函数,后者可以将其分配给成员变量mActivity
。然后,当您需要设置结果时,请致电mActivity.setResult(...)
。