Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

2024-06-04 4817阅读

目录

背景

实现RecyclerView

第一步、 新建item的xml

第二步、在activity的布局中引入 RecyclerView

第三步、新建一个adapter 

 第四步、在activity中初始化绑定adapter即可

实现item及其多个子组件点击事件监听

第一步、 适配器中创建监听对象

第二步、适配器中绑定监听item和子组件

第三点、在activity中实现方法


背景

如下图所示,在对RecyclerView中item及其多个子组件都需要不同的点击事件监听处理,需要使用到adapter的OnItemClickListener和OnItemChildClickListener两个对象。

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听 第1张

实现RecyclerView

第一步、 新建item的xml

新建一个xml文件(black_item.xml)作为单个item的样式,代码如下:

    
    
        
            
            
            
        
        
            
                
                
            
            
        
    

 样式效果如下图:

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听 第2张

第二步、在activity的布局中引入 RecyclerView

 

第三步、新建一个adapter 

用于相应数据和功能配置,代码如下:

public class BlackRVAdapter extends RecyclerView.Adapter {
    private List myBlackList = new ArrayList();
    public void setListData (List list) {
        this.myBlackList = list;
        notifyDataSetChanged(); // 刷新
    }
    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 加载布局
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.black_item, parent, false);
        MyHolder myHolder = new MyHolder(view);
        return myHolder;
    }
    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, @SuppressLint("RecyclerView") int position) {
        // 绑定数据
        BlackItem BlackItem = myBlackList.get(position);
        // 修改item样式
        holder.black_address.setText(BlackItem.getIp_address());
        holder.black_note.setText("备注:" + BlackItem.getNote());
        holder.black_time.setText(BlackItem.getCreated_time());
        holder.black_ip.setText(BlackItem.getIp());
    }
    @Override
    public int getItemCount() {
        return myBlackList.size();
    }
    static class MyHolder extends RecyclerView.ViewHolder {
        
        TextView black_address;
        TextView black_note;
        TextView black_time;
        TextView black_ip;
        ImageView iv_copy_ip;
        Button btn_black_del;
        public MyHolder(@NonNull View itemView) {
            super(itemView);
            black_time = itemView.findViewById(R.id.black_item_time);
            black_ip = itemView.findViewById(R.id.black_item_ip);
            black_address = itemView.findViewById(R.id.black_item_address);
            black_note = itemView.findViewById(R.id.black_item_note);
            iv_copy_ip = itemView.findViewById(R.id.iv_copy_ip);
            btn_black_del = itemView.findViewById(R.id.btn_black_del);
        }
    }
}

 第四步、在activity中初始化绑定adapter即可

public class IpBlackListActivity extends AppCompatActivity {
    private RecyclerView blackRecyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ip_black_list);
        initView();
  
    }
    private void initView () {
        blackRecyclerView = findViewById(R.id.rv_black);
        // 绑定适配器
        blackRVAdapter = new BlackRVAdapter();
        blackRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        blackRecyclerView.setAdapter(blackRVAdapter);
        blackRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); // 添加下划线
       
    }
}

实现item及其多个子组件点击事件监听

第一步、 适配器中创建监听对象

public class BlackRVAdapter extends RecyclerView.Adapter {
    private static OnItemChildClickListener onItemChildClickListener;
    private static OnItemClickListener onItemClickListener;
   
    public interface OnItemChildClickListener {
        /**
         * 子组件点击事件
         * @param view
         * @param position
         * @param type 子组件类型,用于判断是哪个子组件
         */
        void onItemChildClick(View view, int position, String type);
    }
    public void setOnItemClickListener(OnItemChildClickListener listenser) {
        onItemChildClickListener = listenser;
    }
    public interface OnItemClickListener {
        void onItemClick(int position);
    }
    public void setOnItemClickListener(OnItemClickListener listenser) {
        onItemClickListener = listenser;
    }
}

第二步、适配器中绑定监听item和子组件

public class BlackRVAdapter extends RecyclerView.Adapter {
    private static OnItemChildClickListener onItemChildClickListener;
    private static OnItemClickListener onItemClickListener;
    static class MyHolder extends RecyclerView.ViewHolder {
        public MyHolder(@NonNull View itemView) {
            super(itemView);
            
            // 绑定子控件
            iv_copy_ip = itemView.findViewById(R.id.iv_copy_ip);
            btn_black_del = itemView.findViewById(R.id.btn_black_del);
            // 子控件1
            btn_black_del.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onItemChildClickListener != null) {
                        onItemChildClickListener.onItemChildClick(view, getAdapterPosition(), "chil_1");
                    }
                }
            });
            // 子控件2
            iv_copy_ip.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onItemChildClickListener != null) {
                        onItemChildClickListener.onItemChildClick(view, getAdapterPosition(), "chil_2");
                    }
                }
            });
            // item点击监听
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(getAdapterPosition());
                    }
                }
            });
        }
    }
    public interface OnItemChildClickListener {
        /**
         * 子组件点击事件
         * @param view
         * @param position
         * @param type 子组件类型,用于判断是哪个子组件
         */
        void onItemChildClick(View view, int position, String type);
    }
    public void setOnItemClickListener(OnItemChildClickListener listenser) {
        onItemChildClickListener = listenser;
    }
    public interface OnItemClickListener {
        void onItemClick(int position);
    }
    public void setOnItemClickListener(OnItemClickListener listenser) {
        onItemClickListener = listenser;
    }
}

第三点、在activity中实现方法

public class IpBlackListActivity extends AppCompatActivity {
    private RecyclerView blackRecyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ip_black_list);
        initView();
  
    }
    private void initView () {
        blackRecyclerView = findViewById(R.id.rv_black);
        // 绑定适配器
        blackRVAdapter = new BlackRVAdapter();
        blackRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        blackRecyclerView.setAdapter(blackRVAdapter);
        blackRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); // 添加下划线
        // 子组件点击事件
        blackRVAdapter.setOnItemClickListener(new BlackRVAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(View view, int position, String type) {
                if (type.equals("chil_1")) {
                    // 子组件1点击后执行...
                    
                } else if (type.equals("chil_2") {
                    // 子组件2点击后执行...
                    
                }
            }
        }
        
        // item点击事件
        blackRVAdapter.setOnItemClickListener(new BlackRVAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // item点击后执行...                
            }
        });
       
    }
}

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]