热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android(8)RecyclerView适配器实现多布局item+item内部控件点击事件

先看看效果是不是自己想要的吧item及item内部控件点击事件不懂的可以先点击查看

@先看看效果是不是自己想要的吧@

 

&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>item及item内部控件点击事件不懂的可以先点击查看<&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;

 

使用步骤&#xff1a;

第一步&#xff1a;添加RecyclerView适配器依赖

compile &#39;com.android.support:recyclerview-v7:27.1.1&#39;

第二步&#xff1a;布局文件里使用RecyclerView

第三步&#xff1a;创建两个item子布局填充item内容

itemone.xml



itemtwo.xml


第四步&#xff1a;定义一个实体类Data&#xff0c;作为Recyclerview的适配类型

package com.ied.recyclerview.entity;public class Data {public static final int TYPE_ONE &#61; 1;//类型1public static final int TYPE_TWO &#61; 2;//类型2public int type;//item内容 类型public int icon;public String username;public String message;public Data(int type, int icon, String username, String message) {this.type &#61; type;this.icon &#61; icon;this.username &#61; username;this.message &#61; message;}public static int getTypeOne() {return TYPE_ONE;}public static int getTypeTwo() {return TYPE_TWO;}public int getType() {return type;}public void setType(int type) {this.type &#61; type;}public int getIcon() {return icon;}public void setIcon(int icon) {this.icon &#61; icon;}public String getUsername() {return username;}public void setUsername(String username) {this.username &#61; username;}public String getMessage() {return message;}public void setMessage(String message) {this.message &#61; message;}
}

第五步&#xff1a;创建自定义MyRecyclerViewAdapter适配器继承RecyclerView.Adapter

package com.ied.recyclerview.adapter;import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.ied.recyclerview.R;
import com.ied.recyclerview.entity.Data;
import java.util.List;public class MyRecyclerViewAdapter extends RecyclerView.Adapter{private List list;//数据源private Context context;//上下文public MyRecyclerViewAdapter(List list, Context context) {this.list &#61; list;this.context &#61; context;}&#64;NonNull&#64;Overridepublic RecyclerView.ViewHolder onCreateViewHolder(&#64;NonNull ViewGroup parent, int viewType) {//选择类型switch (viewType){case Data.TYPE_ONE:View view &#61; LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);return new OneViewHolder(view);case Data.TYPE_TWO:view &#61; LayoutInflater.from(parent.getContext()).inflate(R.layout.itemtwo,parent,false);return new TwoViewHolder(view);}return null;}//绑定&#64;Overridepublic void onBindViewHolder(&#64;NonNull RecyclerView.ViewHolder holder, int position) {}//有多少个item&#xff1f;&#64;Overridepublic int getItemCount() {return list.size();}//item类型&#64;Overridepublic int getItemViewType(int position) {return list.get(position).type;}//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;以下为item中的button控件点击事件处理&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;//第一步&#xff1a;自定义一个回调接口来实现Click和LongClick事件public interface OnItemClickListener {void onItemClick(View v, int position);void onItemLongClick(View v);}public OnItemClickListener mOnItemClickListener;//第二步&#xff1a;声明自定义的接口//第三步&#xff1a;定义方法并暴露给外面的调用者public void setOnItemClickListener(OnItemClickListener listener) {this.mOnItemClickListener &#61; listener;}
//&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;//第一个item类型class OneViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {private ImageView ivIcon;private TextView tvUsername, tvMessage;private Button btnAgree, btnRefuse;//private List list;public OneViewHolder(View itemView) {super(itemView);ivIcon &#61; itemView.findViewById(R.id.iv_icon);tvUsername &#61; itemView.findViewById(R.id.tv_username);tvMessage &#61; itemView.findViewById(R.id.tv_message);btnAgree &#61; itemView.findViewById(R.id.btn_agree);btnRefuse &#61; itemView.findViewById(R.id.btn_refuse);// 为item及item内部控件添加点击事件itemView.setOnClickListener(this);btnAgree.setOnClickListener(this);btnRefuse.setOnClickListener(this);}&#64;Overridepublic void onClick(View v) {if (mOnItemClickListener !&#61; null) {mOnItemClickListener.onItemClick(v, getAdapterPosition());}}}//第二个item类型class TwoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {private ImageView ivIcon;private TextView tvUsername;public TwoViewHolder(View itemView) {super(itemView);ivIcon &#61; itemView.findViewById(R.id.iv_icon);tvUsername &#61; itemView.findViewById(R.id.tv_username);// 为item添加点击事件itemView.setOnClickListener(this);}&#64;Overridepublic void onClick(View v) {if (mOnItemClickListener !&#61; null) {mOnItemClickListener.onItemClick(v, getAdapterPosition());}}}}

 

第六步&#xff1a;在MainActivity中编写&#xff0c;初始化数据&#xff0c;设置适配器

 

package com.ied.recyclerview;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import com.ied.recyclerview.adapter.MyRecyclerViewAdapter;
import com.ied.recyclerview.entity.Data;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView rvRecyclerView;private MyRecyclerViewAdapter adapter;private List list;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();rvRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));//控制布局为LinearLayout或者是GridView或者是瀑布流布局adapter &#61; new MyRecyclerViewAdapter(list,this);rvRecyclerView.setAdapter(adapter);// 设置item及item中控件的点击事件adapter.setOnItemClickListener(MyItemClickListener);}private void initView() {rvRecyclerView &#61; (RecyclerView) findViewById(R.id.rv_recyclerView);}private void initData() {list &#61; new ArrayList<>();list.add(new Data(1,R.mipmap.ic_launcher, "username", "让我们成为好友吧&#xff01;"));list.add(new Data(2,R.mipmap.ic_launcher, "username", "让我们成为好友吧&#xff01;"));list.add(new Data(1,R.mipmap.ic_launcher, "username", "让我们成为好友吧&#xff01;"));list.add(new Data(2,R.mipmap.ic_launcher, "username", "让我们成为好友吧&#xff01;"));list.add(new Data(1,R.mipmap.ic_launcher, "username", "让我们成为好友吧&#xff01;"));}/*** item&#xff0b;item里的控件点击监听事件*/private MyRecyclerViewAdapter.OnItemClickListener MyItemClickListener &#61; new MyRecyclerViewAdapter.OnItemClickListener() {&#64;Overridepublic void onItemClick(View v, int position) {switch (v.getId()){case R.id.btn_agree:Toast.makeText(MainActivity.this,"你点击了同意按钮"&#43;(position&#43;1),Toast.LENGTH_SHORT).show();break;case R.id.btn_refuse:Toast.makeText(MainActivity.this,"你点击了拒绝按钮"&#43;(position&#43;1),Toast.LENGTH_SHORT).show();break;default:Toast.makeText(MainActivity.this,"你点击了item按钮"&#43;(position&#43;1),Toast.LENGTH_SHORT).show();break;}}&#64;Overridepublic void onItemLongClick(View v) {}};}

最后成功实现多布局item及item内部控件的点击事件&#xff01;&#xff01;

 

 

 


推荐阅读
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • MacOS上高效的SVN管理工具Cornerstone安装指南
    本文详细介绍如何在MacOS上安装和配置高效SVN管理工具Cornerstone,涵盖其主要功能和优化后的性能提升。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
author-avatar
Yao2502880171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有