热门标签 | 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;

 

 

 


推荐阅读
  • 本文介绍如何通过自定义控件LoadLayout实现ListView的上拉加载更多和下拉刷新功能。LoadLayout支持上拉加载,而下拉刷新则利用了android.support.v4.widget.SwipeRefreshLayout组件。 ... [详细]
  • Android商城应用开发指南(第二部分):创建启动欢迎页
    大多数商城应用程序在启动时会显示一个欢迎页面,以提升用户体验。本文将指导您如何实现一个基本的欢迎页,该页面会在用户打开应用后短暂展示,随后自动跳转至主界面。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • Android开发技巧:实现带描边的圆角图片
    本文介绍了一种在Android应用中实现带描边的圆角图片的方法。通过使用BitmapShader类,开发者可以轻松地为图片添加圆角和描边效果,提升应用的视觉体验。 ... [详细]
  • Android 手机安全应用首屏布局设计
    本文详细介绍了如何构建一个功能丰富的手机安全应用的首个导航界面布局。通过实例代码和效果展示,帮助开发者快速理解和实现相关功能。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 深入解析Android动画中的插值器(Interpolator)
    本文详细介绍了Android动画系统中插值器的作用和使用方法,包括如何通过插值器控制动画的速度变化,以及如何自定义插值器来实现特定的动画效果。 ... [详细]
  • 如何在应用中添加Banner广告
    本文详细介绍如何在移动应用中集成并添加Banner广告,包括必要的准备工作、代码实现及常见问题解决方法,帮助开发者快速掌握添加Banner广告的技术要点。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • springMVC JRS303验证 ... [详细]
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社区 版权所有