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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Thymeleaf,官方推荐html解决方案