实现思路:
(1) 让当前activity实现clickListener(或者在activity中单独new 一个监听器对象)。
(2) 创建lv 适配器的时候,通过构造将监听器传递进适配器,并把该监听器设置给要点击的控件
(3) 适配器中,通过被点击控件的setTag 方法将当前条目position 传递出去
(4) 在activity中 clcikListener 的 click方法中,通过getTag获取被点击控件所在条目的位置,从而做进一步的操作
activity:
public class FriendApplyActivity extends BaseActivity implements View.OnClickListener {
private ListView lvFriendApply;
RequestsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend_apply_list);
lvFriendApply = findViewById(R.id.lvFriendApply);
adapter = new RequestsAdapter(FriendApplyActivity.this, FriendApplyActivity.this, “你的数据”);
lvFriendApply.setAdapter(adapter);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ivYes:
int pYes = (int) v.getTag(); //获取点击的position
adapter.notifyDataSetChanged(); //刷新adapter
break;
case R.id.ivNo:
int pNo = (int) v.getTag();
break;
}
}
}
adapter:
public class RequestsAdapter extends BaseAdapter {
View.OnClickListener listener; //定义点击事件
Context context;
List<FriendRequestsData> list;
LayoutInflater inflater;
public RequestsAdapter(View.OnClickListener listener,Context context, List<FriendRequestsData> list) {
this.listener = listener;
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_list_friend_apply, null);
holder = new ViewHolder();
holder.ivImage = convertView.findViewById(R.id.ivImage);
holder.tvName = convertView.findViewById(R.id.tvName);
holder.ivYes = convertView.findViewById(R.id.ivYes);
holder.ivNo = convertView.findViewById(R.id.ivNo);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Glide.with(context).load(list.get(position).getEmber().getAvatar())
.apply(RequestOptions.bitmapTransform(new CircleCrop())).into(holder.ivImage);
holder.tvName.setText(ConversionUtils.toUtf8(list.get(position).getEmber().getName()) + "");
holder.ivYes.setOnClickListener(listener); //设置点击事件
holder.ivNo.setOnClickListener(listener);
holder.ivYes.setTag(position); //把选中的item的position传出去
holder.ivNo.setTag(position);
return convertView;
}
class ViewHolder {
private ImageView ivImage;
private TextView tvName;
private ImageView ivYes;
private ImageView ivNo;
}
}