2-VII-RecyclerView事件
[1].本文接上文:RecyclerView基本使用
[2].RecyclerView把很多事都交给了我们,就连item的点击事件都没有
[3].在adapter中加载布局的时候,可以为item添加事件
[4].没有点击效果,还要自己添加点击的选择器
[5].RecyclerView增删条目以及条目运动效果
一、点击事件
方式1.修改:FirstRvAdapter#onCreateViewHolder
public FirstViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载布局文件 View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null); final FirstViewHolder holder = new FirstViewHolder(itemView); //点击监听 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToastUtil.showAtOnce(mCtx, "Position:"+holder.getLayoutPosition()); } }); return holder; }
方式2:可以添加回调,将事件推到Activity中
1.FirstRvAdapter中监听点击事件
public FirstViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { //加载布局文件 final View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null); final FirstViewHolder holder = new FirstViewHolder(itemView); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onclick(itemView, parent, holder.getLayoutPosition()); } } }); return holder; } /////////////////////条目点击监听///////////////////////////////////// public interface OnItemClickListener { void onclick(View itemView, ViewGroup parent, int position); } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { mOnItemClickListener = onItemClickListener; }
2.Activity中使用:
mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() { @Override public void onclick(View itemView, ViewGroup parent, int position) { ToastUtil.showAtOnce(DiverRVActivity.this, mData.get(position)); } });
二、背景选择器
添加点击效果:可以自定义选择器
为item的背景添加:安卓自带波纹样式的选择器
//有边界 android:background="?android:attr/selectableItemBackground" //无边界 android:background="?android:attr/selectableItemBackgroundBorderless"
也可以自定义水波纹的样式:
v21及以上有效果
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/gray"><!-- press和水波纹的颜色 --> <item> <!--item中可以自定义shape--> <shape android:innerRadius="5dp" android:shape="rectangle"> <solid android:color="@color/white"/> <corners android:radius="1dp"/> </shape> </item> </ripple>
v21以下无效果
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/colorPrimaryDark" android:state_pressed="true"/> <item android:drawable="@color/colorPrimary"/> </selector>
三、添加与删除:效果是单机添加,长按删除
1.FirstRvAdapter中照样子添加长按监听:
/////////////////////条目长按监听///////////////////////////////////// public interface OnItemLongClickListener { void onLongClick(View itemView, ViewGroup parent, int position); } private OnItemLongClickListener mOnItemLongClickListener; public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { mOnItemLongClickListener = onItemLongClickListener; }
2.FirstRvAdapter添加删除与添加方法:
/** * 添加item * * @param i 位置 * @param str 值 */ public void addData(int i, String str) { data.add(i, str); notifyItemInserted(i);//刷新数据 } /** * 删除item * * @param i 位置 */ public void deleteData(int i) { data.remove(i); notifyItemRemoved(i);//刷新数据 }
3.Activity中使用:
mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() { @Override public void onclick(View itemView, ViewGroup parent, int position) { mAdapter.addData(position, ZRandom.randomCnName()); mRecyclerView.scrollToPosition(0);//滑动到某个条目 } }); mAdapter.setOnItemLongClickListener(new FirstRvAdapter.OnItemLongClickListener() { @Override public void onLongClick(View itemView, ViewGroup parent, int position) { mAdapter.deleteData(position); } });
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
推荐Android两种屏幕适配方案
前言 在Android开发中,由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高。虽然Android官方提供了dp单位来适配,但其在各种奇怪分辨率下表现却不尽如人意,因此下面探索一种简单且低侵入的适配方式。本文将推荐两种屏幕适配方案,大家可以根据实际情况使用。 传统dp适配方式的缺点 android中的dp在渲染前会将dp转为px,计算公式: px = density * dp; density = dpi / 160; px = dp * (dpi / 160); 而dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。 屏幕尺寸、分辨率、像素密度三者关系 通常情况下,一部手机的分辨率是宽x高,屏幕大小是以寸为单位,那么三者的关系是: 举个例子:屏幕分辨率为:1920*1080,屏幕尺寸为5吋的话,那么dpi为440。 这样会存在什么问题呢? 假设我们UI设计图是按屏幕宽度为360dp来设计的,那么在上述设备上,屏幕宽度其实为1080/(440/160)=392.7dp,也就是屏幕是比设计图要宽的。这种情况下...
- 下一篇
RecyclerView抢焦点自动滚动
最近有个项目,其中有一个新闻详情页面,在新闻详情下面是一个用户评论列表,最底部有一个评论输入框,有点类似于今日头条的新闻详情页面。评论列表是采用RecyclerView开发的,点击底部评论输入框会弹出软键盘。发现有个比较诡异的现象,当软键盘缩回去的时候,评论列表RecyclerView老是会自动滚动到顶部。这样体验会比较差,有可能我本来在看某条评论信息,点击评论输入后又放弃,这个时候我肯定是希望页面停留在原来那个地方的。 如下2张图所示,RecyclerView的header是一个WebView,用来加载新闻网页信息,其他列表项则是显示评论,点击底部评论弹出一个输入框以及软键盘,当软键盘取消的时候,RecyclerView自动滚动到了header顶部: 原本列表位置 弹出输入法后 通过查看源码以及参考网上别人的分析,原来这就是所谓的RecyclerView抢夺焦点现象。当输入框及软键盘显示出来的时候,整个界面的焦点是在这个输入框EditText上的,但是当取消软键盘的时候,界面焦点发生了变化,RecyclerView抢夺了焦点,进而导致界面自动滚动了。 通过试验,采用以下方法解决了我的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7