實現思路:
(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;
}
}