Android -- ListView中item控件的點擊事件處理

實現思路:

(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;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章