Android中实现RecyclerView,并对item及其多个子控件的点击事件监听
目录
背景
实现RecyclerView
第一步、 新建item的xml
第二步、在activity的布局中引入 RecyclerView
第三步、新建一个adapter
第四步、在activity中初始化绑定adapter即可
实现item及其多个子组件点击事件监听
第一步、 适配器中创建监听对象
第二步、适配器中绑定监听item和子组件
第三点、在activity中实现方法
背景
如下图所示,在对RecyclerView中item及其多个子组件都需要不同的点击事件监听处理,需要使用到adapter的OnItemClickListener和OnItemChildClickListener两个对象。
实现RecyclerView
第一步、 新建item的xml
新建一个xml文件(black_item.xml)作为单个item的样式,代码如下:
样式效果如下图:
第二步、在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。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!